如果我要遵循 RAII 规则并使用 C++ 开发一个类,是否有必要使用静态构造函数?静态构造函数会以任何方式帮助我还是会是错误的一步?
user349026
问问题
332 次
3 回答
1
你可以有一些静态函数CreateInstance()
来返回你的类的实例。
使用 RAII,您的函数可能必须向您返回一些指向您创建的实例的智能指针,以避免复制实际对象。然后你存储这个指针,如果你需要它在其他地方复制它。当所有智能指针都被破坏时,对象也将被破坏。如果这就是你想要的,那么是的 - 你可以有“静态构造函数”。
当然,这在 RAII 中不是必须的,通常只是不必要的并发症。
于 2010-11-05T09:59:30.650 回答
1
我认为您正在谈论创建类实例的静态工厂函数(正如其他人指出的那样)。在这种情况下,您不需要使用 RAII 模式。
请记住,您需要为您的类分配堆栈,以便 (自动)调用构造函数并初始化各种数据。此外, 当堆栈展开并执行其他操作(例如释放资源等)时(自动)调用析构函数。
如果您的类静态初始化它的数据,那么 RAII 模式将失败,因为静态保存的数据未绑定到类的实例。因此,当堆栈展开时,没有要析构的实例,也没有调用析构函数,并且没有实现 RAII 模式。
于 2010-11-05T10:13:36.690 回答