微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以使用在初始化列表中初始化的C类成员,稍后在列表中吗?

我正在重写一些代码以消除全局变量并使类构造函数/析构函数句柄清理某些第三方库资源,但我担心一些代码会从类初始化列表中的另一个成员初始化一个成员.
class MyPodofodocument {
public:
    // generates pdf to stream
    MyPodofodocument(std::stringstream *pStringStream)
        : device(pStringStream),document(&device)
    {
    }
private:
    PodoFo::PdfOutputDevice device;
    PodoFo::PdfStreamedDocument document;
    PodoFo::PdfPainter painter;
};

使用这个类的代码不需要查看使用该库的所有细节,但是我隐藏它们的方式使它依赖于使用成员初始化其他成员,然后才能访问构造函数的实际代码块,在那里它有一个有效的this指针.

它适用于单元测试骨架,所以我的问题基本上是,“这样可以,便携且安全吗?”

解决方法

成员按照声明的顺序从上到下进行初始化
PodoFo::PdfOutputDevice device;
PodoFo::PdfStreamedDocument document;
PodoFo::PdfPainter painter;

所以使用device初始化文件是安全的.

原文地址:https://www.jb51.cc/c/114302.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐