【发布时间】:2023-03-20 03:44:01
【问题描述】:
首先,std::weak_ptr 的典型实现是什么?特别是std::weak_ptr 只是一个指向std::shared_ptr 的控制块的指针吗?
如果所有std::shared_ptr 引用都消失了,是否删除了内部控制块?如果是这样,如果重新使用该内存,std::weak_ptr::expired() 将如何正常工作?
我有一个包含std::weak_ptr 的对象,我想将memcpy 对象放到缓冲区中以供稍后处理。这样做会以某种方式破坏智能指针的内部工作吗?
【问题讨论】:
-
en.cppreference.com/w/cpp/types/is_trivially_copyable#Notes 。
std::weak_ptr有重要的构造函数,如果我没看错的话。 -
@Justin 非平凡构造函数的存在不是问题,只有非平凡的复制或移动构造函数存在。但是,实现不可能有一个简单的
std::weak_ptr复制构造函数,因为复制weak_ptr需要修改控制块。 -
"特别是 std::weak_ptr 只是一个指向 std::shared_ptr 控制块的指针" 不是“是 a”而是 包含一个
标签: c++ c++11 shared-ptr weak-ptr data-representation