首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么在析构中delete

2012-04-16 
如何在析构中delete?简单的描述一下问题,比如定义了类A:templatetypename Tclass A{public:A(const T& x

如何在析构中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
[解决办法]

C/C++ code
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的说法,一个参数只是多个参数的一个特例,所以只要实现多个参数即可,更好地重用代码而且使得逻辑更清晰。

热点排行