有没有办法在 C++ 中部分释放结构/类?我试图在 C++ 中构建某种指向 RefCount
的新指针template<typename T>
struct RefCount {
unsigned int ref;
T data;
};
template<typename T>
class ptr {
RefCount<T> *m_object;
};
可以在
ref > 0
时安全地访问所指向的对象,并让用户能够创建 ref == 0
,但无需首先销毁 RefCount 的所有实例。
我考虑首先销毁
data
部分(我将其称为 RefCount 的“尾部”),但实际上将 ref
部分保留在内存中,以防 T
非常大,我不希望它取出记忆中不安全的部分。
请注意,此结构的行为与 std::shared_ptr 不同。
我不想使用 2 指针方法(指向
data
和
ref
作为 2 个不同的对象)的原因是为了性能。而且我也不想出于明显的原因重新分配一个单独保存 bool 的新对象(它破坏了结构的工作方式)。
您当然可以编写自己的分配器来提供类似的东西。这种功能对分配器的性能和内存开销影响是什么,是另一个问题。
但是,该语言不允许部分释放对象的存储,因此您不能拥有
RefCount
结构。相反,您需要手动将两个子对象存储在分配的存储中,并对每个子对象进行放置新和显式析构函数调用,然后让
m_object
指向底层
std::byte
或
unsigend char
存储,您可以从中访问这两个子对象带有
std::launder
.的子对象