【发布时间】:2016-05-19 17:23:54
【问题描述】:
我有一个看起来像这样的通用类:
template <class T>
class Example
{
private:
T data;
public:
Example(): data(T())
Example(T typeData): data(typeData)
~Example()
// ...
};
我有点困惑如何为这样的事情实现解构器。具体来说,由于T 是任何类型的,它可能是分配在堆栈上的内存(对于Example 通过无参数构造函数创建的情况总是如此)或堆上。
例如,如果客户端将T 的类型设为int* 并提供指向动态内存的指针,我怎么知道在data 上调用delete 而不是客户端设置类型给int?
【问题讨论】:
-
好吧,你可以像标准容器一样而不是那样做。如果类型是指针类型,标准容器析构函数不会对元素做任何事情。
-
提示:使用基于
std::is_pointer<T>的 CRTP 策略类型惯用语。享受构建它的乐趣,然后将整个东西装箱,因为在使用时很难区分指向自动变量的指针和动态变量的指针。 -
两个有效点。我正在做我认为更像是一种练习的东西,所以我最终只是想知道我是否遗漏了什么,或者这是否只是一件很难解决的事情(似乎是这样)