我正在重写一些代码以消除全局变量,并且让一个构造函数/析构函数处理某些第三方库资源的清理,但是我担心一些代码会从类初始化程序列表中的其他成员初始化一个成员。我可以使用初始化器列表中初始化的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;
};
使用这个类并不需要看到所有进入使用库的详细信息的代码,但我隐瞒他们的方式使得它依赖于使用成员初始化其他成员,它击中前构造函数的实际代码块,它有一个有效的指针。
它在单元测试框架中工作,所以我的问题基本上是“这是好的,便携的和安全的吗?”
此外,获取地址或将引用绑定到尚未构建的成员是合法的(即,如果接收者不使用*对象,但只存储引用/指针)。 – 2013-02-19 20:48:25
传递是合法的,但在语义上是错误的,因为你将一个指针传递给尚未构造的东西。 – 2013-02-19 20:53:13
@AlexChamberlain:它一定没有错,但可能需要重新检查。 – GManNickG 2013-02-19 21:12:04