在C++中,根据之前文章中提到的条款05,创建一个空的class类,编译器会默认生成一些特殊成员函数(如构造函数,析构函数,拷贝构造函数、拷贝赋值运算符等),如果不想让编译器自动生成這些函数,可以通过以下方式实现:
1、引入 = delete
C++ 11引入了= delete,可以显式删除函数,明确告诉编译器不要生成delete修饰的函数了。
class MyClass{
public:
MyClass = default; // 允许默认构造函数
// 明确表示,删除拷贝函数和拷贝赋值预算法
MyClass(const MyClass&) = delete;
MyClass& operate=(const MyClass&) = delete;
}
2、将函数声明为private
C++11 之前,可以通过将函数声明为private,并不提供实现,用来阻止外部调用。private修饰的函数,外部不能调用。
class MyClass{
public:
MyClass = default; // 允许默认构造函数
private:
// 声明,但不实现
MyClass(const MyClass&);
MyClass& operate=(const MyClass&);
}
3、继承不可拷贝的基类
定义一个不可拷贝的基类,并让目标类继承它。因为基类显式说明没有拷贝函数和拷贝赋值操作符的函数调用功能,其派生子类也具有该特性。
class NonCopyable {
protected:
NonCopyable() = default;
~NonCopyable() = default;
// 删除拷贝构造函数和拷贝赋值运算符
NonCopyable(const NonCopyable&) = delete;
NonCopyable& operator=(const NonCopyable&) = delete;
};
class MyClass : private NonCopyable {
// MyClass 现在不可拷贝
};
思维导图笔记

1071

被折叠的 条评论
为什么被折叠?



