我有在其构造函数中创建其他子对象的对象,传递“this”以便子对象可以将指针保存回其父对象。我在编程中广泛使用 boost::shared_ptr 作为 std::auto_ptr 或原始指针的更安全替代方案。所以孩子会有诸如 , 之类的代码shared_ptr<Parent>
,而 boost 提供了shared_from_this()
父母可以给孩子的方法。
我的问题是它shared_from_this()
不能在构造函数中使用,这并不是真正的犯罪,因为除非您知道自己在做什么并且不介意限制,否则无论如何都不应该在构造函数中使用“this”。
Google 的 C++ Style Guide声明构造函数只应将成员变量设置为其初始值。任何复杂的初始化都应该在显式的 Init() 方法中进行。这解决了“this-in-constructor”问题以及其他一些问题。
困扰我的是,现在使用您的代码的人必须记住每次构造您的对象时都调用 Init()。我能想到的唯一方法是通过断言 Init() 已经在每个成员函数的顶部被调用,但这写起来很乏味,执行起来也很麻烦。
在此过程中的任何步骤中是否有任何成语可以解决此问题?