相关疑难解决方法(0)

从shared_ptr获得正常的ptr?

我有类似于shared_ptr<Type> t(makeSomething(), mem_fun(&Type::deleteMe)) 我现在需要调用需要指针的C样式函数Type.我怎样才能得到它shared_ptr

c++ boost smart-pointers shared-ptr

47
推荐指数
2
解决办法
7万
查看次数

enable_shared_from_this(c ++ 0x):我做错了什么?

我只是在即将推出的新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();
}
Run Code Online (Sandbox Code Playgroud)

它会在行中抛出一个std :: bad_weak_ptr异常

std::shared_ptr<CVerboseBornAndDie2> p = vbad->shared_from_this();
Run Code Online (Sandbox Code Playgroud)

如果我反而这样做

std::shared_ptr<CVerboseBornAndDie2> p(vbad);
Run Code Online (Sandbox Code Playgroud)

它有效,我可以事后做

std::shared_ptr<CVerboseBornAndDie2> p2 = …
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers shared-ptr c++11

9
推荐指数
2
解决办法
6100
查看次数

标签 统计

c++ ×2

shared-ptr ×2

smart-pointers ×2

boost ×1

c++11 ×1