练习13.23 练习13.24 1. 如果没有定义析构函数的话,会造成内存泄露。因为,成员变量ps是通过new操作在堆上显式分配出的一段内存,需要使用delete显式的去释放。 2. 如果没有定义拷贝构造函数的话,可能会造成二次释放,或使用悬空指针的情况。因为,在合成的赋值运算符中,让不同实例的ps ...
分类:
编程语言 时间:
2017-09-01 21:21:03
阅读次数:
194
参考:http://www.weixueyuan.net/view/6343.html 总结: 带参数的构造函数中有两种比较常见的构造函数:拷贝构造函数和转型构造函数。 转型构造函数只有一个参数,如果该参数是int型,则我们是将int型对象转换为类对象。 直接强制关闭掉这种隐式类型转换,在C++中, ...
分类:
编程语言 时间:
2017-09-01 16:09:58
阅读次数:
259
练习13.9 析构函数执行与构造函数相反的操作,构造函数初始化对象的非static数据成员,析构函数释放对象使用的资源,并销毁对象的非static数据成员.当一个类没有定义自己的析构函数的时候,编译器会为它定义一个合成析构函数。 练习13.10 在一个构造函数中,成员的初始化是在函数体执行之前完成的 ...
分类:
编程语言 时间:
2017-08-31 22:17:24
阅读次数:
179
练习13.1 如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数;拷贝初始化通常使用拷贝构造函数来完成。拷贝构造函数被用来初始化非引用类类型参数; 练习13.2 拷贝构造函数自己的参数必须是引用类型。如果其参数不是引用类型,则调用永远也不会成功-为了 ...
分类:
编程语言 时间:
2017-08-31 19:44:39
阅读次数:
233
如何禁止对象之间的拷贝? 将构造函数和析构函数中的任意一个设置为private,如下: 编译报错提示:Variable of type 'A' has private destructor. 我们知道,如果我们不显性的声明拷贝构造函数和重载=,那么编译器会为我们提供默认的拷贝构造函数和copy as ...
分类:
其他好文 时间:
2017-08-31 00:59:27
阅读次数:
152
1.new 、 delete 、 malloc 、 free 关系 delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数。 malloc 与 free 是 C++/C 语言的标准库函数, new/delete 是 C++ 的运算符。它们都可用于申请 ...
分类:
编程语言 时间:
2017-08-30 17:10:07
阅读次数:
143
C++的自定义类中有六个默认的函数,即如果用户没有显式定义这些函数时,C++编译器会类中生成这些函数的默认形式。除了大家所熟知的构造函数、拷贝构造函数、赋值函数和析构函数外,C++为自定义类 还提供了两个容易被人忽视的默认函数——取地址函数和对常对象的取地址函数。 一、取地址函数 在C++中可以通过 ...
分类:
编程语言 时间:
2017-08-30 00:51:10
阅读次数:
249
c++11添加了delete关键字。 不想用那个函数,在那个函数后面加 = delete就可以了; 比如: 上述功能看似没啥作用,都delete为啥还要写。 但是,因为c++对每个类都会默认生出6个函数。有时间后我们不想我们的类被拷贝或赋值。我们可以把拷贝构造函数,重载赋值函数定义为私有。 但是定义 ...
分类:
编程语言 时间:
2017-08-24 23:52:00
阅读次数:
201
当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数: (1)一个对象以值传递的方式传入函数体 (2)一个对象以值传递的方式从函数返回 (3)一个对象需要通过另外一个对 ...
分类:
编程语言 时间:
2017-08-24 14:56:20
阅读次数:
169
构造函数,顾名思义,新构造一个对象。如下调用的就是普通的构造函数: 拷贝构造函数,顾名思义,也是一种构造函数,特殊的构造函数,用一个已存在的对象初始化一个新的对象,就是拷贝构造函数。如下调用的就是拷贝构造函数,用已经存在的string s去初始化新的对象a: 拷贝构造函数声明如下:(以String为 ...
分类:
其他好文 时间:
2017-08-20 00:47:31
阅读次数:
124