C++删除的函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiongya8888/article/details/89424474

删除的函数

删除的函数是这样一种函数:虽然声明了它们,但不能以任何方式使用它们,析构函数不能定义为删除的函数。下面的代码通过将拷贝构造函数和拷贝赋值运算符定义为删除的函数来阻止拷贝。

class Person
{
public:
	const char* name_;
	Person(const char* name):name_(name) {};
	Person(const Person& person) = delete;
	Person& operator=(const Person& person) = delete;
};

编译器合成的函数可能是删除的

如果一个类有数据成员不能默认构造,拷贝,赋值,销毁,则对应的成员函数被定义为删除的。

  • 如果类的某个成员的析构函数是删除的或不可访问的(例如private),则类的合成析构函数和合成拷贝构造函数被定义为删除的。
  • 如果类的某个成员的拷贝构造函数删除的或不可访问的,则类的合成拷贝构造函数被定义为删除的。
  • 如果类的某个成员的拷贝赋值运算符是删除的或不可访问的,或是类有一个const的或引用成员,则类的合成拷贝赋值运算符被定义为删除的。
  • 如果类的某个成员的析构函数是删除的或不可访问的,或是类有一个引用成员没有类内初始值,或是有一个const成员没有类内初始值且其类型未显式定义默认构造函数,则该类的默认构造函数被定义为删除的。

private访问控制

在C++11以前,类是通过将拷贝构造函数和拷贝赋值运算符声明为priavte来阻止拷贝的,由于它们是private的,所以用户代码不能拷贝这个类型的对象,但友元和成员函数依然可以拷贝,所以我们将拷贝构造函数和拷贝赋值运算符声明为private,但不定义它们,声明但不定义一个成员函数是合法的,试图访问一个未定义的成员将导致一个链接时错误。

猜你喜欢

转载自blog.csdn.net/xiongya8888/article/details/89424474
今日推荐