我有一个像这样的库提供的类:
template <typename T>
class TypedClass
{
public:
typedef typename boost::shared_ptr<TypedClass<T> > Ptr;
T m_data;
T* m_pointer_data;
};
假设我愿意接受 int 和 float 在这个特定架构上总是相同的大小(和对齐),这对我来说似乎是有效的:
TypedClass<int>* int_object = new TypedClass<int>();
TypedClass<float>* float_object = reinterpret_cast<TypedClass<float>* >(int_object);
现在我正在尝试使用 boost shared_ptrs 来实现同样的目标,并提出了这个:
TypedClass<int>::Ptr int_object = TypedClass<int>::Ptr(new TypedClass<int>());
void* int_object_void_pointer = reinterpret_cast<void*>(int_object.get());
TypedClass<float>::Ptr float_object(reinterpret_cast<TypedClass<float>*>(int_object_void_pointer));
这似乎工作正常,但是这种共享指针的使用会导致对象被删除两次,我想避免这种情况。
重要的是要注意“TypedClass”是第三方库的一部分,并且该库使用共享指针来实现其所有内部功能,因此我需要这种形式的数据。我之前已经解决了这个继承自 boost enable_shared_from_this 的问题,但这里不可能。
这只是一种简单的技术,它试图为具有相同大小的数据类型重用相同的对象,而不必分配具有新类型的新对象。
欢迎提出建议。