将所有权从std::shared_ptr移动到std::unique_ptr
Move ownership from std::shared_ptr to std::unique_ptr
我有一个类A
,它的字段类型为std::unique_ptr
:
class A
{
public:
std::unique_ptr pointer;
// class body
};
在代码的某个地方,我使用了几个指向相同对象的std::shared_ptr
s。现在我想要实现的是将所有权转移到我的类中的这个std::unique_ptr
,这样如果所有的shared_ptr
将被销毁,我的对象将保持存活,只要这个unique_ptr
将保持存活。
我的问题是-是否有可能将所有权从std::shared_ptr
移动到std::unique_ptr
,如果是,我该如何做到这一点?
从逻辑上讲,这样的场景对我来说没有意义。
假设有可能转移所有权,但是只有当你确定只有一个 shared_ptr
存活时,你才能这样做;如果是这种情况,那么您仍然可以使用shared_ptr
作为A
的成员,并且假装是unique_ptr
。
然后你评论:
那是真的,我可以在A类中创建
shared_ptr
。我想我又误解了一个概念。我想这样做:如果unique_ptr
死亡,对象本身也会死亡,即使shared_ptr
s仍然指向它,但这很愚蠢,因为它们不知道对象本身已被销毁,因此它们不会是nullptr
s。
在这种情况下,您正在查看错误的智能指针。你可能需要的是std::weak_ptr
。如果是这样,那么请确保使用一个std::shared_ptr
,其他所有std::weak_ptr
。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- 引用 std::shared:ptr 以避免引用计数
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误
- 使用std :: String ptr的错误打印std :: String
- C++中的大小释放:全局运算符delete的正确行为是什么(void*ptr,std::size_t size)
- std::哈希表示无序映射中的唯一 PTR
- boost::shared_ptr和std::shared-ptr的同居
- 我可以用std::shared_ptr而不是boost::shared-ptr构建boost库吗
- 正确使用std智能指针以确保ptr安全
- 如何创建 std::string 包装器,它将 ptr 保留为 std::string 和 ptr 到创建该包装器实例的
- 为什么 std::string{ "const char ptr" } 有效?
- 为什么 gcc 4.9.0 中没有定义"void operator delete(void* ptr, std::size_t size) noexcept;"?
- 在 std::map 的值中使用非 ptr 是一种很好的做法吗
- 共享 PTR - C++:std::shared_ptr<T> 和 std::shared_ptr<T const> 有什么区别?