C++11中的default和delete

文章目录


  C++一个类如果没有显式定义一些函数(如构造函数、析构函数、拷贝函数等),编译器在需要的时候会生成一个默认版本。C++11引入default和delete关键字,增强对类默认函数的控制,当让这不是全部功能。

default

  含义:被标识的默认函数将使用类的默认行为。

class Test {
public:
	Test() = default;
	// Test(int x = 0) = default;  // error:不能有默认参数
	Test(const Test&) = default;
	Test& operator=(const Test&) = default;
	~Test();
	// Test(int x) = default;   // error:Test(int x)不属于编译器默认生成函数
};

inline Test::~Test() = default;  // 可以在类定义外显式指定缺省版本
delete

  含义:被标识的函数被禁用,不仅仅是类的默认函数,也可以是普通成员函数或非成员函数。

// 类的默认函数
class Test {
public:
	// Test() = delete;
	Test() = default;
    Test(int x) = delete;
	Test(const Test&) = default;
	Test& operator=(const Test&) = default;
	~Test() = default;
	void* operator new(size_t) = delete;
};

int main() {
	// Test a;  // 构造函数和析构函数其中一个delete或者声明private就不能在栈上生成对象
	// Test *t = new Test(); // operator new()和operator delete()其中一个delete或者声明private就不能在栈上生成对象
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值