我有一个泛型类myClass
,有时需要根据用途存储额外的状态信息。这通常使用void*
完成,但我想知道是否可以使用std::unique_ptr<void, void(*)(void*)>
以便在类实例被销毁时自动释放内存。问题是我需要使用自定义删除器来删除void *导致未定义的行为。
有没有办法默认构造一个std::unique_ptr<void, void(*)(void*)>
,所以我没有先使用虚拟删除器构造它,然后在我使用void*
作为状态结构时设置一个真正的删除器?或者是否有更好的方法将状态信息存储在类中?
以下是一些示例代码:
void dummy_deleter(void*) { }
class myClass
{
public:
myClass() : m_extraData(nullptr, &dummy_deleter) { }
// Other functions and members
private:
std::unique_ptr<void, void(*)(void*)> m_extraData;
};
答案 0 :(得分:6)
存储额外信息的更直观的方法可能是使用带有虚拟析构函数的接口IAdditionalData。
您可能拥有的任何数据结构都将从IAdditionalData继承并存储在std::unique_ptr<IAdditionalData>
中。
这也提供了更多的类型安全性,就像在IAdditionalData和实际类型之间进行静态转换一样,而不是void *
和任何数据类型之间的reinterpret_cast。