【发布时间】:2011-03-16 16:30:57
【问题描述】:
在《The C++ Language》一书中,作者声称
有时,当您设计一个库时,有必要或者只是为了方便,发明一种具有构造函数和析构函数的类型,其唯一目的是初始化和清理。这种类型只能使用一次:分配一个静态对象,以便调用构造函数和析构函数。
我对这句话所指的场景感兴趣?或者这个陈述如何帮助软件设计?
书中还举了一个例子
class Zlib_init{
Zlib_init( );
~Zlib_init( );
};
class Zlib{
static Zlib_init x;
}
这本书说
不幸的是,不能保证这样的对象在第一次使用前被初始化,在由单独编译的单元组成的程序中最后一次使用后被销毁。
为什么会发生这种情况?
感谢您的澄清。
【问题讨论】:
-
你可以保证这样的对象会在 main 被调用之前被创建并且在 main 返回之后被销毁。因此,您可能会想说“但是,但是……一切都很好”。不幸的是,您的程序中可能有一个不同的静态对象,它也使用 Zlib_init 对象,并且 C++ 语言不保证该对象是否会在此对象或任何其他对象之前或之后被创建或销毁,只要它们在不同的编译单元。所以,措辞可能有点迂腐,但它是 100% 正确的。 (好吧,反正它是正确的,因为它是 Stroustrup)。
标签: c++ class constructor initialization