关于拷贝构造函数与析构函数

tjhack7946358 2010-06-15 08:58:53
C++程序设计教程(第二版)上有句话:
需要定义拷贝构造函数的类也需要定义析构函数,不需要拷贝构造函数的类,也无须定义析构函数。所以析构函数与拷贝构造函数是成对出现的。

对象创建的时候申请动态内存,释放难道不要用析构函数吗?我感觉还是需要啊。
...全文
175 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liutengfeigo 2010-06-16
  • 打赏
  • 举报
回复
有时候析构函数不能完成你想要完成的工作,你就必需在析构函数里面让功能完善。
既然学了C++,就别抱怨了,安心学吧。。。
tjhack7946358 2010-06-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 y7501272 的回复:]
需要定义拷贝构造函数的类也需要定义析构函数,不需要拷贝构造函数的类,也无须定义析构函数。所以析构函数与拷贝构造函数是成对出现的。
这句貌似是不对 我们定义一个类 无论是构造函数 拷贝构造函数 析构函数 都是默认有的(虽然我们没有写 其实编程环境要自动为这些类添加 当然我们也可以写 要是写了 就以我们写的为准)


对象创建的时候申请动态内存,释放难道不要用析构函数吗?我感觉还是需要啊。
……
[/Quote]
既然有析构函数,那为什么还要自己重新定义析构函数,真的弄糊涂了。。。
wade_2003 2010-06-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pgplay 的回复:]
同上,个人感觉C++Primer有关的内容要比LZ的书描述的更好些

“如果类需要析构函数,则它也需要赋值操作符和复制构造函数,这是一个有用的经验法则。这个规则常称为三法则,指的是如果需要析构函数,则需要所有这三个复制控制成员。”——C++Primer
[/Quote]
up~~~~~~~~
y7501272 2010-06-15
  • 打赏
  • 举报
回复
需要定义拷贝构造函数的类也需要定义析构函数,不需要拷贝构造函数的类,也无须定义析构函数。所以析构函数与拷贝构造函数是成对出现的。
这句貌似是不对 我们定义一个类 无论是构造函数 拷贝构造函数 析构函数 都是默认有的(虽然我们没有写 其实编程环境要自动为这些类添加 当然我们也可以写 要是写了 就以我们写的为准)


对象创建的时候申请动态内存,释放难道不要用析构函数吗?我感觉还是需要啊。
这个问题是就是编程规范的问题了.一个块里的对象就只有程序运行到该块里面时才会开辟内存空间
程序跳出该块后 局部对象自动释放(所以 在很多函数里 我们不写delete)

个人愚见 请大家多多指教
breezes2008 2010-06-15
  • 打赏
  • 举报
回复
有时候不要太纠结书上的讲的,可以用例子亲自来试验。
耍宝王 2010-06-15
  • 打赏
  • 举报
回复
同上,个人感觉C++Primer有关的内容要比LZ的书描述的更好些

“如果类需要析构函数,则它也需要赋值操作符和复制构造函数,这是一个有用的经验法则。这个规则常称为三法则,指的是如果需要析构函数,则需要所有这三个复制控制成员。”——C++Primer
cattycat 2010-06-15
  • 打赏
  • 举报
回复
这本书很不规范,怎么能误导人,建议找本好书看吧。c++ primer可以
Oversense 2010-06-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 tjhack7946358 的回复:]
C++程序设计教程(第二版)上有句话:
需要定义拷贝构造函数的类也需要定义析构函数,不需要拷贝构造函数的类,也无须定义析构函数。所以析构函数与拷贝构造函数是成对出现的。

对象创建的时候申请动态内存,释放难道不要用析构函数吗?我感觉还是需要啊。
[/Quote]

楼主有点糊涂
chaoliu1024 2010-06-15
  • 打赏
  • 举报
回复
释放需要析构函数!
析构函数可以为空,如果觉得没必要定义析构函数,可以不写,编译器在编译的过程中会自动帮你添加一个空的析构函数。
析构函数的作用在于释放对象时的一些后续工作,比如动态内存调用,int *p_int = new int; 这时候你申请了一块整型大小的内存区域,而没有任何人知道这块内存在什么地方,并且,这个p_int变量很重要,在整个程序的生命周期都不能销毁,那你只能在析构函数中做delete p_int了,否则在对象销毁后,这块内存区域并没有释放,造成了内存泄露。 所以要析构函数!
jbz001 2010-06-15
  • 打赏
  • 举报
回复
那本书上这样写???
我只知道类默认会有析构函数的
tan625747 2010-06-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 tjhack7946358 的回复:]
C++程序设计教程(第二版)上有句话:
需要定义拷贝构造函数的类也需要定义析构函数,不需要拷贝构造函数的类,也无须定义析构函数。所以析构函数与拷贝构造函数是成对出现的。

对象创建的时候申请动态内存,释放难道不要用析构函数吗?我感觉还是需要啊。
[/Quote]
是需要

64,282

社区成员

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

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