gpt4 book ai didi

c++ - 将从唯一指针移动到共享指针也会初始化 enable_shared_from_this

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:44 24 4
gpt4 key购买 nike

当我继承std::enable_shared_from_this,但是我创建了一个unique_ptr,std::enable_shared_from_this里面的weak_ptr也会被初始化吗当我通过 std::move 或移动构造函数“移动”到 shared_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;
}

最佳答案

根据 https://en.cppreference.com/w/cpp/memory/enable_shared_from_this所有 std::shared_ptr 构造函数都应该初始化内部弱引用,因此将 std::unique_ptr 移动到 std::shared_ptr 应该启用使用 shared_from_this

您必须小心,当对象属于 std::unique_ptr 时,没有人会调用 shared_from_this,因为这是未定义的行为或将抛出 std::bad_weak_ptr 取决于您的 c++ 版本。

关于c++ - 将从唯一指针移动到共享指针也会初始化 enable_shared_from_this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53834878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com