11

我有一个通用类myClass,有时需要根据使用情况存储额外的状态信息。这通常使用 a 完成void*,但我想知道是否可以使用 astd::unique_ptr<void, void(*)(void*)>以便在类实例被破坏时自动释放内存。问题是我需要使用自定义删除器,因为删除 void* 会导致未定义的行为。

有没有办法默认构造 a 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;
};
4

1 回答 1

6

存储额外信息的一种更直观的方法可能是使用带有虚拟析构函数的接口 IAdditionalData。无论您拥有什么数据结构,都将从 IAdditionalData 继承并存储在std::unique_ptr<IAdditionalData>.

这也提供了更多的类型安全性,因为您将在 IAdditionalData 和实际类型之间进行静态转换,而不是在void *任何数据类型之间进行 reinterpret_cast。

于 2013-03-13T12:04:25.783 回答