如何在析构中delete?
简单的描述一下问题,比如定义了类A:
template<typename T>
class A
{
public:
A(const T& x):element(new T(x)){}
A(int n,const T& val) { element=new T[n];
for(int i=0;i<n;++i) element[i]=val;
}
private:
T* element;
};
有两个重载构造函数,分别用到了new、new[],请赐教如何编写析构函数,难道是delete或delete []
[解决办法]
delete []
[解决办法]
请问,你不用delete用什么?
[解决办法]
同意
不过楼主的设计是不是有问题啊,element在不同的构造函数中是两个意思?
成员函数要如何对待呢?
[解决办法]
一般不会这么设计的吧
你也可以设置一个中间标志你是用new还是new[]
析构时检查下该标志,进行分类delete
[解决办法]
template <typename T> class A { public: A(const T& x): size(1), element(new T(x)){} A(int n,const T& val) : size (n) { element=new T[n]; for(int i=0;i <n;++i) element[i]=val; } private: int size; T* element; };
[解决办法]
同意1120(c.k.t -> BM@Orc)
但是这样的设计很不好啊
楼主既然用到了模板,更应该让指定的类型更明确一些
这样不容易造成混乱
[解决办法]
全部用new []好了,再给个size,只有一个的时候就是[0]
[解决办法]
你加个变量标拾一下吧
[解决办法]
同意believefym的说法,一个参数只是多个参数的一个特例,所以只要实现多个参数即可,更好地重用代码而且使得逻辑更清晰。