请详细介绍C加加11 中的delete和=default
时间: 2024-02-16 10:04:33 浏览: 75
C++11中的delete和=default关键字与C++98标准的delete和=default有些不同,下分别介绍:
1. delete
在C++11中,delete关键字不仅可以用于销毁new出来的对象,还可以用于显式地禁用某些函数,例如:
```
class MyClass {
public:
MyClass(int x) {
// 构造函数
}
MyClass(const MyClass&) = delete; // 禁用复制构造函数
MyClass& operator=(const MyClass&) = delete; // 禁用复制赋值运算符
};
```
上面的代码中,禁用了复制构造函数和复制赋值运算符,这样就可以避免对象的浅拷贝问题。如果需要复制对象,可以手动编写复制函数。
2. =default
在C++11中,=default关键字用于显式地生成默认函数,例如:
```
class MyClass {
public:
MyClass() = default; // 显式地生成默认构造函数
MyClass(const MyClass& other) = default; // 显式地生成复制构造函数
MyClass& operator=(const MyClass& other) = default; // 显式地生成复制赋值运算符
~MyClass() = default; // 显式地生成析构函数
};
```
需要注意的是,使用=default来生成默认函数时,需要保证该函数是可以编译通过的,否则会导致编译错误。如果一个类中的某个函数被显式地声明为=default,那么编译器会自动为该函数生成默认实现。默认实现的行为与编译器自动生成的默认函数相同。另外,如果一个类中的某个函数被显式地声明为=default,则该函数不能被重载。
总之,C++11中的delete和=default关键字扩展了它们的用途,使得程序员可以更加灵活地控制对象的行为。
阅读全文