社区
C++ 语言
帖子详情
关于拷贝构造函数与析构函数
tjhack7946358
2010-06-15 08:58:53
C++程序设计教程(第二版)上有句话:
需要定义拷贝构造函数的类也需要定义析构函数,不需要拷贝构造函数的类,也无须定义析构函数。所以析构函数与拷贝构造函数是成对出现的。
对象创建的时候申请动态内存,释放难道不要用析构函数吗?我感觉还是需要啊。
...全文
175
11
打赏
收藏
关于拷贝构造函数与析构函数
C++程序设计教程(第二版)上有句话: 需要定义拷贝构造函数的类也需要定义析构函数,不需要拷贝构造函数的类,也无须定义析构函数。所以析构函数与拷贝构造函数是成对出现的。 对象创建的时候申请动态内存,释放难道不要用析构函数吗?我感觉还是需要啊。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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]
是需要
【C++】构造函数、
析构函数
、
拷贝构造函数
C++的构造函数、
析构函数
、
拷贝构造函数
C++入门:构造函数,
析构函数
,
拷贝构造函数
详解
目录 类的6个默认成员函数 一.构造函数 1.概念 2.特征如下: 1. 函数名与类名相同。 2. 无返回值。 3. 对象实例化时编译器自动调用对应的构造函数。 4. 构造函数可以重载。 5. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成。 ?6. 无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。 7. 关于编译器生成的默认成员函数,很多同学会有疑惑: ?8. (了解)C++11打的补丁: 二.
析构函数
1.概
C++面向对象编程之二:构造函数、
拷贝构造函数
、
析构函数
C++利用构造函数和
析构函数
,完成对象的初始化和清理工作。对象的初始化和清理工作,是编译器强制我们要做的事情,如果我们不提供构造函数和
析构函数
,编译器会提供3个函数:1. 默认无参构造函数。2. 默认
拷贝构造函数
。3. 默认
析构函数
。构造函数:在对象初始化时,对对象的成员属性赋初始值。构造函数由编译器自动调用,不用手动调用。
拷贝构造函数
:在对象初始化时,将一个已有的对象的所有成员属性拷贝到这个被创建的对象上。
拷贝构造函数
由编译器自动调用,不用手动调用。
析构函数
:在对象销毁前系统自动调用,执行一些清理工作
C++ 构造函数、
析构函数
、
拷贝构造函数
原文链接:构造函数、
析构函数
、
拷贝构造函数
一、构造函数 概念(作用): 用来在创建对象时,对对象进行初始化 特点 构造函数无返回值,函数名与类名相同,必须存在于public中 构造函数可以重载 不用来初始化static数据成员,因为static数据成员不属于类 默认构造函数(合成的构造函数) 如果没有在类中给出构造函数,编译器自动生成一个默认的构造函数(无参数、函数体为空) 当在类中手动给出构造函数时,默认的构造函数消失 编译器自动生成的默认的构造函数又称为“合成的默认构造.
构造函数、
析构函数
、
拷贝构造函数
、
默认构造函数的重要性、
析构函数
的参数只能为类类型对象的引用,浅拷贝对于资源管理方面的处理。
C++ 语言
64,282
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章