C++ Primer 5th笔记(chap 13 拷贝控制)三五法则

1. 三个基本操作可以控制类的拷贝操作

• 拷贝构造函数
• 拷贝赋值运算符
• 析构函数。

新标准还有2个函数:
• 移动构造函数(move constructor)
• 移动赋值运算符(move-assignment operator)

2. 二个法则

原则1:

通常这前3个函数作为一个整体出现。当决定一个类是否要自定义拷贝控制成员时,一个基本原则就是首先确定这个类是否需要一个析构函数,如果一个类需要析构函数,几乎可以肯定它也需要一个拷贝构造函数和一个拷贝赋值运算符。

class HasPtr{
    
    
public:
	HasPtr(const std::string &s = std::string()):ps,(new std::string(s),i(0)){
    
    }
	~HasPtr(){
    
    delete ps;}
}

如何使用编译器会合成默认的拷贝构造函数和拷贝赋值运算符,这些函数将简单的拷贝指针成员,这意味着多个 HasPtr 对象可能指向相同的内存(会带来问题的哦)

HasPtr f(HasPtr hp)	//HasPtr是一个传值参数,所以被拷贝
{
    
    
	HasPtr ret = hp;	//拷贝给指定的HasPtr
	return ret;	//ret 和 hp 被销毁
}

原则2

需要拷贝操作的类也需要赋值操作,反之亦然,需要拷贝构造函数或者拷贝赋值函数不一定需要析构。

猜你喜欢

转载自blog.csdn.net/thefist11cc/article/details/113858381