相关疑难解决方法(0)

为此获得boost :: shared_ptr

boost:shared_ptr在我的代码中广泛使用.实际上,堆上分配的大多数对象都是由a保存的shared_ptr.不幸的是,这意味着我无法传递this任何需要的函数shared_ptr.考虑以下代码:

void bar(boost::shared_ptr<Foo> pFoo)
{
    ...
}

void Foo::someFunction()
{
    bar(this);
}
Run Code Online (Sandbox Code Playgroud)

这里有两个问题.首先,这不会编译,因为T*构造函数shared_ptr是显式的.其次,如果我强制它构建,bar(boost::shared_ptr<Foo>(this))我将创建第二个指向我的对象的共享指针,最终将导致双删除.

这让我想到了一个问题:是否有任何标准模式可以从其中一个对象的方法中获取您知道的现有共享指针的副本?使用侵入式引用计数是我唯一的选择吗?

c++ boost

76
推荐指数
5
解决办法
4万
查看次数

为什么unique_ptr <T>(T*)是显式的?

以下函数无法编译:

std::unique_ptr<int> foo()
{
    int* answer = new int(42);
    return answer;
}

std::unique_ptr<int> bar()
{
    return new int(42);
}
Run Code Online (Sandbox Code Playgroud)

我觉得这有点不方便.std::unique_ptr<T>(T*)明确的理由是什么?

c++ pointers type-conversion unique-ptr c++11

29
推荐指数
2
解决办法
1589
查看次数

标签 统计

c++ ×2

boost ×1

c++11 ×1

pointers ×1

type-conversion ×1

unique-ptr ×1