理解构造函数中shared_from_this的局限性
正如《C标准库》摘录中所述,shared_from_this()面临着一个技术问题构造函数内的限制。要理解这个概念,有必要深入研究shared_from_this()的内部工作原理。
弱指针在shared_from_this中的作用
shared_from_this()依赖于一个内部的weak_ptr 维护对创建的对象的弱引用。这个弱指针保持未初始化状态,直到为该对象创建强shared_ptr(拥有该对象的shared_ptr)。只有实例化第一个shared_ptr后,对象的基类enable_shared_from_this才能访问这个shared_ptr并初始化weak_ptr。
构造时序问题
这个依赖现有的shared_ptr给构造函数带来了问题。当调用构造函数时,尚不存在指向正在构造的对象的shared_ptr。因此,在构造过程中,enable_shared_from_this无法初始化其weak_ptr,从而导致shared_from_this()在构造函数中无法使用。
澄清示例
请考虑以下代码片段:
class Person : public std::enable_shared_from_this<Person> { ... }; std::shared_ptr<Person> p(new Person());
在此示例中,Person() 的构造函数在shared_ptr p 的构造函数之前运行。这意味着在Person()构造函数期间,不存在指向Person对象的shared_ptr,从而禁止enable_shared_from_this初始化其weak_ptr并导致构造函数内无法访问shared_from_this()。
以上是为什么不能在构造函数中使用“shared_from_this()”?的详细内容。更多信息请关注PHP中文网其他相关文章!