c++11 delete禁用函数
2017-08-24 22:49
232 查看
c++11添加了delete关键字。
不想用那个函数,在那个函数后面加 = delete就可以了;
比如:
上述功能看似没啥作用,都delete为啥还要写。
但是,因为c++对每个类都会默认生出6个函数。有时间后我们不想我们的类被拷贝或赋值。我们可以把拷贝构造函数,重载赋值函数定义为私有。
但是定义成私有,类内部还是可以拷贝,赋值。 我想要无论如何都不能调用拷贝、赋值怎么办。
当然是用delete一下啦。
以下是测试代码:
上述代码可以看出,delete 函数后面,就把这个函数完全消失掉了。继承也木有用了。
不想用那个函数,在那个函数后面加 = delete就可以了;
比如:
在函数重载中,可用 delete 来滤掉一些函数的形参类型,如下: bool IsLucky(int number); // original function bool IsLucky(char) = delete; // reject chars bool IsLucky(bool) = delete; // reject bools bool IsLucky(double) = delete; // reject doubles and floats
上述功能看似没啥作用,都delete为啥还要写。
但是,因为c++对每个类都会默认生出6个函数。有时间后我们不想我们的类被拷贝或赋值。我们可以把拷贝构造函数,重载赋值函数定义为私有。
但是定义成私有,类内部还是可以拷贝,赋值。 我想要无论如何都不能调用拷贝、赋值怎么办。
当然是用delete一下啦。
以下是测试代码:
#include <iostream> using namespace std; class Test { public: Test() { } Test(const Test&) = delete; Test& operator = (const Test&) = delete; }; class Test1 : public Test{ }; int main() { Test test; //Test t2 = test;//编译错误 Test1 t1; //Test1 t2 = t1;//编译错误 return 0; }
上述代码可以看出,delete 函数后面,就把这个函数完全消失掉了。继承也木有用了。
相关文章推荐
- C++11特性--新的类功能--特殊的成员函数(移动构造函数,移动赋值运算符),默认方法和禁用方法(default,delete),委托构造函数,管理虚方法(override,final)
- C++11 理解 (十九) 之 使用或禁用对象的默认函数
- C++11 FAQ中文版:控制默认函数——默认或者禁用
- C++11之使用或禁用对象的默认函数
- C++11 FAQ中文版:控制默认函数——默认或者禁用
- lnmp开启禁用函数的方法
- 如何重载new和delete函数
- C++11系列-改进的类型推导:auto、decltype和新的函数语法
- 虚拟主机服务器php fsockopen函数被禁用的解决方法
- C++——C++11中的defalut和delete关键字
- C++11的新特性 Lambda 函数
- 题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能
- C++11新特性:Lambda函数(匿名函数) 一段代码即可理解
- cocos2d-x C++ 利用C++11新特性+runAction RepeatForever Sequence DelayTime做一个持续循环函数 每秒更新 5次后停止
- 【转】如何禁用或启用fsockopen()函数
- C++11中的匿名函数(lambda函数,lambda表达式)
- win7 修改winlogon内存 禁用Ctrl+Alt+Delete
- c++11之default和delete
- 窗口禁用和启用函数
- C++11中function和bind绑定函数的理解--其中可能存在理解错误。这里只是粗糙理解而已。