nma*_*rko 6 c++ templates class
我有一个看起来像这样的泛型类:
template <class T>
class Example
{
private:
T data;
public:
Example(): data(T())
Example(T typeData): data(typeData)
~Example()
// ...
};
Run Code Online (Sandbox Code Playgroud)
我对如何为这样的事情实现解构器感到困惑.具体来说,既然T是任何类型的,它可以是在堆栈上分配的内存(Example通过无参数构造函数创建的情况总是如此)或堆上.
例如,如果客户端发出的类型T的int*,并提供一个指向动态内存,我怎么知道调用delete上data,而不是在客户端设置的类型int?
最简单的答案是:不要.不要试图猜测用户并做一些他们可能没想到的事情.采用与标准容器相同的策略:假设T正确清理后.
如果客户端代码编写正确,它将使用RAII类(如智能指针)自动和正确管理内存和其他资源.如果不是,您不能希望在提供商代码中修复它.
让你的类工作,std::unique_ptr和std::shared_ptr,以及任何其他自定义RAII类,并让你的客户做管理自己.毕竟,如果他们想要存储非拥有指针怎么办?