2021年7月10日

摘要: 1.拷贝构造函数是函数,赋值运算符是运算符重载。 2.拷贝构造函数会生成新的类对象,赋值运算符不能。 3.拷贝构造函数是直接构造一个新的类对象,所以在初始化对象前不需要检查源对象和新建对象是否 相同;赋值运算符需要上述操作并提供两套不同的复制策略,另外赋值运算符中如果原来的对象有 内存分配则需要先把 阅读全文
posted @ 2021-07-10 21:49 超人不会灰啊 阅读(306) 评论(0) 推荐(0)
 
摘要: 构造函数: 对象不存在,没用别的对象初始化,在创建一个新的对象时调用构造函数 拷贝构造函数: 对象不存在,但是使用别的已经存在的对象来进行初始化 赋值运算符: 对象存在,用别的对象给它赋值,这属于重载“=”号运算符的范畴,“=”号两侧的对象都是已存在的 举个例子: #include <iostrea 阅读全文
posted @ 2021-07-10 21:45 超人不会灰啊 阅读(120) 评论(0) 推荐(0)
 
摘要: 1.this指针是类的指针,指向对象的首地址。 2.this指针只能在成员函数中使用,在全局函数、静态成员函数中都不能用this。 3.this指针只有在成员函数中才有定义,且存储位置会因编译器不同有不同存储位置。 this指针的用处 一个对象的this指针并不是对象本身的一部分,不会影响sizeo 阅读全文
posted @ 2021-07-10 21:25 超人不会灰啊 阅读(304) 评论(0) 推荐(0)
 
摘要: 首先需要明白一件事情,临时变量,在函数调用过程中是被压到程序进程的栈中的,当函数退出时,临 时变量出栈,即临时变量已经被销毁,临时变量占用的内存空间没有被清空,但是可以被分配给其他变 量,所以有可能在函数退出时,该内存已经被修改了,对于临时变量来说已经是没有意义的值了 C语言里规定:16bit程序中 阅读全文
posted @ 2021-07-10 21:08 超人不会灰啊 阅读(492) 评论(0) 推荐(0)
 
摘要: #include <iostream>using namespace std;int f(int n){ cout << n << endl; return n;}void func(int param1, int param2){ int var1 = param1; int var2 = par 阅读全文
posted @ 2021-07-10 21:04 超人不会灰啊 阅读(644) 评论(0) 推荐(0)
 
摘要: 1) 对象生命周期结束,被销毁时; 2) delete指向对象的指针时,或delete指向对象的基类类型指针,而其基类虚构函数是虚函数时; 3) 对象i是对象o的成员,o的析构函数被调用时,对象i的析构函数也被调用。 阅读全文
posted @ 2021-07-10 20:28 超人不会灰啊 阅读(179) 评论(0) 推荐(0)
 
摘要: 原理 智能指针是一个类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自动调用析构函数释放资源 常用的智能指针 (1) shared_ptr 实现原理:采用引用计数器的方法,允许多个智能指针指向同一个对象,每 阅读全文
posted @ 2021-07-10 12:19 超人不会灰啊 阅读(363) 评论(0) 推荐(0)
 
摘要: (1)创建一个对象时需要确定对象的类型,而虚函数是在运行时动态确定其类型的。在构造一个对象时,由于对象还未创建成功,编译器无法知道对象的实际类型 (2)虚函数的调用需要虚函数表指针vptr,而该指针存放在对象的内存空间中,若构造函数声明为虚 函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表 阅读全文
posted @ 2021-07-10 12:18 超人不会灰啊 阅读(219) 评论(0) 推荐(0)
 
摘要: 1) C++只会析构已经完成的对象,对象只有在其构造函数执行完毕才算是完全构造妥当。在构造函数中发生异常,控制权转出构造函数之外。 因此,在对象b的构造函数中发生异常,对象b的析构函数不会被调用。因此会造成内存泄漏。 2) 用auto_ptr对象来取代指针类成员,便对构造函数做了强化,免除了抛出异常 阅读全文
posted @ 2021-07-10 11:59 超人不会灰啊 阅读(174) 评论(0) 推荐(0)