在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
也就是说,class内有一个指针,使用new来动态申请内存的情况下,默认的copy constructor和assignment运算符是浅拷贝(bitwise copy),也即直接拷贝指针的值,可能会有内存泄露的危险 Item 12 -- 在constructor中尽量以initialization动作取代assignment动作原因: Item 13 -- initialization中的members初始化次序应该和其在class内的声明次序相同原因也很容易理解:编译器构造和析构的顺序是相反的,编译器不可能针对初始化列表中的顺序进行初始化,否则重载不同初始化顺序的构造函数会让编译器头晕的。编译器内部确定是按照class内的声明次序,如果初始化列表不同,很可能初始化列表的数据会错误。 Item 14 -- 总是让base class拥有virtual destructor原因很容易理解:基类指针指向具体派生类,delete基类指针的时候,需要虚函数进行多态。 Item 15 -- 令operator= 传回"*this的reference"原因:objA = objB = objC这种连续的重载=号行为
Item16-- 在operator=中为所有的data members设定(赋值)内容原因:编译器会默认为你生成一个operator=,采用bitwise,所以最好都是自己写一个 Item17 -- 在Operator=中检查是否"自己赋值给自己"一般采用的方法:
这主要是针对如何判断对象相等的问题,这里采用的是地址相等的方法 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论