2

如果我要遵循 RAII 规则并使用 C++ 开发一个类,是否有必要使用静态构造函数?静态构造函数会以任何方式帮助我还是会是错误的一步?

4

3 回答 3

4

这没有任何意义,你不能有一个静态构造函数。构造函数的全部目的是初始化一个类的特定实例;如果它是静态的,它将不属于任何实例。

RAII 只是说您需要在析构函数中释放资源,并且该资源的获取发生在将运行该析构函数的对象的初始化(构造)中。(这需要您需要一个工作的或禁止的复制构造函数,以及一个工作赋值运算符。)

于 2010-11-05T09:44:10.250 回答
1

你可以有一些静态函数CreateInstance()来返回你的类的实例。

使用 RAII,您的函数可能必须向您返回一些指向您创建的实例的智能指针,以避免复制实际对象。然后你存储这个指针,如果你需要它在其他地方复制它。当所有智能指针都被破坏时,对象也将被破坏。如果这就是你想要的,那么是的 - 你可以有“静态构造函数”。

当然,这在 RAII 中不是必须的,通常只是不必要的并发症。

于 2010-11-05T09:59:30.650 回答
1

我认为您正在谈论创建类实例的静态工厂函数(正如其他人指出的那样)。在这种情况下,您不需要使用 RAII 模式。

请记住,您需要为您的类分配堆栈,以便 (自动)调用构造函数并初始化各种数据。此外, 当堆栈展开并执行其他操作(例如释放资源等)时(自动)调用析构函数。

如果您的类静态初始化它的数据,那么 RAII 模式将失败,因为静态保存的数据未绑定到类的实例。因此,当堆栈展开时,没有要析构的实例,也没有调用析构函数,并且没有实现 RAII 模式。

于 2010-11-05T10:13:36.690 回答