国税网站建设现状,重庆专门做网站的公司,标书制作教程全过程,arcengine网站开发default 和 delete
在C中#xff0c;声明自定义的类型之后#xff0c;编译器会默认生成一些成员函数#xff0c;这些函数被称为默认函数。其中包括#xff1a; #xff08;1#xff09;#xff08;默认#xff09;构造函数 #xff08;2#xff09;拷贝#xff08… default 和 delete
在C中声明自定义的类型之后编译器会默认生成一些成员函数这些函数被称为默认函数。其中包括 1默认构造函数 2拷贝复制构造函数 3拷贝复制赋值运算符 4移动构造函数 5移动赋值运算符 6析构函数 另外编译器还会默认生成一些操作符函数包括 7operator , 8operator 9operator 10operator * 11operator - 12operator -* 13operator new 14operator delete default 显示缺省函数
如果类设计者又实现了这些函数的自定义版本后编译器就不会去生成默认版本。 大多数时候我们需要声明带参数的构造函数此时就不会生成默认构造函数这样会导致类不再是POD类型可参见随笔《C11 POD类型》。 明确默认的函数声明式一种新的函数声明方式在 C11 发布时做出了更新。C11 允许添加 default 说明符到函数声明的末尾以将该函数声明为显示默认构造函数。这就使得编译器为显示默认函数生成了默认实现它比手动编程函数更加有效。 delete 显示删除函数
另一方面有时候可能需要限制一些默认函数的生成。 例如需要禁止拷贝构造函数的使用。以前通过把拷贝构造函数声明为private访问权限这样一旦使用编译器就会报错。 而在 C11 中只要在函数的定义或者声明后面加上” delete”就能实现这样的效果相比较这种方式不容易犯错且更容易理解。 在C 11之前操作符delete 只有一个目的即释放已动态分配的内存。而C 11标准引入了此操作符的另一种用法即禁用成员函数的使用。这是通过附加 delete来完成的; 说明符到该函数声明的结尾。 使用’ delete’说明符禁用其使用的任何成员函数称为expicitly deleted函数。
类的函数声明后面的“default”是什么意思?
这是一个新的c 11特性。
这意味着你想使用编译器生成的函数版本因此不需要指定函数体。 你也可以使用 delete来指定你不希望编译器自动生成该函数。
随着移动构造函数和移动赋值操作符的引入何时生成构造函数、析构函数和赋值操作符的自动版本的规则变得相当复杂。
使用 default和 delete可以让事情变得更简单因为你不需要记住规则: 只需说出你想要发生什么。