【发布时间】:2018-12-18 14:09:52
【问题描述】:
当我从std::enable_shared_from_this 继承但我创建了一个unique_ptr 时,当我通过std::move 或移动构造函数“移动”到shared_ptr 时,std::enable_shared_from_this 内部的weak_ptr 是否也会被初始化?
例如下面的代码会发生什么:
#include <memory>
#include <iostream>
class A : public std::enable_shared_from_this< A >
{
public:
std::shared_ptr< A > getA()
{
return shared_from_this();
}
};
int main()
{
std::unique_ptr< A > u(new A());
// Aborts
//std::cout << u->getA() << std::endl;
std::shared_ptr< A > s(std::move(u));
// Will this work or abort too?
std::cout << s << ", " << s->getA() << std::endl;
}
【问题讨论】:
-
std::move 基本上是一个 noop,它没有任何作用。移动构造函数是唯一可以初始化对象的构造函数。
-
我已经详细阐述了我的问题。我的意思是当我从一个weak_ptr 创建一个shared_ptr 时。它会初始化 std::enable_shared_from_this 基类吗?
-
以minimal reproducible example 的形式显示您的代码示例。
-
所以你有一个带有这个 shared_from_this 对象的 unique_ptr(这已经是一个错误,不是吗?)并且你从中创建了一个新的 shared_ptr,这没有意义,因为已经有一个 shared_pointer 和 shared_from_this .创建另一个是错误的。
-
我添加了一些示例代码,这是否表明您的要求?
标签: c++ stl smart-pointers