如何在析构中delete?

tangshuiling 2007-12-13 04:08:33
简单的描述一下问题,比如定义了类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 []
...全文
187 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
张琪Samuel 2007-12-13
  • 打赏
  • 举报
回复
同意believefym的说法,一个参数只是多个参数的一个特例,所以只要实现多个参数即可,更好地重用代码而且使得逻辑更清晰。
maxx 2007-12-13
  • 打赏
  • 举报
回复
你加个变量标拾一下吧
believefym 2007-12-13
  • 打赏
  • 举报
回复
全部用new []好了,再给个size,只有一个的时候就是[0]
queshangxintou 2007-12-13
  • 打赏
  • 举报
回复
同意1120(c.k.t -> BM@Orc)
但是这样的设计很不好啊
楼主既然用到了模板,更应该让指定的类型更明确一些
这样不容易造成混乱
tangshuiling 2007-12-13
  • 打赏
  • 举报
回复
我本身也同义1楼的做法,但总感觉是种欺骗,由此想到的是不是我本身的构造函数设计有问题,如果是设计的问题还请指出如何改进。
batistawjp 2007-12-13
  • 打赏
  • 举报
回复

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;
};

这样设计类不是更好吗?
ckt 2007-12-13
  • 打赏
  • 举报
回复
一般不会这么设计的吧

你也可以设置一个中间标志你是用new还是new[]
析构时检查下该标志,进行分类delete
believefym 2007-12-13
  • 打赏
  • 举报
回复
是同意1楼
believefym 2007-12-13
  • 打赏
  • 举报
回复
同意

不过楼主的设计是不是有问题啊,element在不同的构造函数中是两个意思?
成员函数要如何对待呢?
星光伴月 2007-12-13
  • 打赏
  • 举报
回复
请问,你不用delete用什么?
飞哥 2007-12-13
  • 打赏
  • 举报
回复
delete []

64,663

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧