gpt4 book ai didi

c++ - enable_shared_from_this(c++0x): what am I doing wrong?

转载 作者:可可西里 更新时间:2023-11-01 16:25:31 25 4
gpt4 key购买 nike

我只是在研究即将推出的新 C++ 标准中的智能指针。但是我没有掌握 shared_from_this 函数的用法。这是我所拥有的:

#include <iostream>
#include <memory>

class CVerboseBornAndDie2 : public std::enable_shared_from_this<CVerboseBornAndDie2>
{
public:
std::string m_Name;
CVerboseBornAndDie2(std::string name) : m_Name(name)
{
std::cout << m_Name << " (" << this << ") is born!" << std::endl;
}
virtual ~CVerboseBornAndDie2()
{
std::cout << m_Name << " (" << this << ") is dying!" << std::endl;
}
};

int main(){
CVerboseBornAndDie2* vbad = new CVerboseBornAndDie2("foo");
std::shared_ptr<CVerboseBornAndDie2> p = vbad->shared_from_this();
}

并在行中抛出 std::bad_weak_ptr 异常

std::shared_ptr<CVerboseBornAndDie2> p = vbad->shared_from_this();

如果我改为这样做

std::shared_ptr<CVerboseBornAndDie2> p(vbad);

它有效,之后我可以做

std::shared_ptr<CVerboseBornAndDie2> p2 = p.get()->shared_from_this();

那么在我可以使用 shared_from_this 之前对象必须属于一个 shared_ptr 吗?但是我怎么能事先知道呢?

最佳答案

使用shared_from_this 的前提条件是必须存在至少一个拥有相关对象的shared_ptr。这意味着您只能使用 shared_from_this 来检索拥有您具有引用或指针的对象的 shared_ptr,您不能使用它来查明是否有这样的对象由 shared_ptr 所有。

您需要重新设计您的设计,以便确保任何此类对象都由 shared_ptr 管理,或者您永远不需要知道,或者最终(也是最不希望的)您创造一些其他方式来管理这些知识。

关于c++ - enable_shared_from_this(c++0x): what am I doing wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4428023/

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