c++11 中函数声明 新关键字 delete的妙用之一: 搭配宏NonCopyable(ClassName) 使用

本文介绍了C++11中使用`delete`关键字禁用拷贝构造函数和赋值运算符的功能,通过示例展示了如何配合宏`NonCopyable(ClassName)`使用,以及`delete`相较于传统private方式的优势。同时,讨论了宏实现NonCopyable时遇到的问题及解决方案,最终提出使用`delete`关键字的NonCopyable宏,以实现更灵活的不可复制类设计。
摘要由CSDN通过智能技术生成

c++11 中函数声明 新关键字 delete的妙用之一搭配宏NonCopyable(ClassName) 使用

编译器版本: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 

 

1.  首先先来见识一下 c++11 声明中的新关键字 delete

 使用如下代码先来试试水.

#include <string>

class  Person
{
public:
    Person(std::string name) : name_(name) { }

    Person(const Person &name) = delete;

private:

    std::string name_;

};

 
int main(int argc, char **argv)

{

    Person p1("Crane");

    Person p2(p1);

}


首先这是一个Person.借用莱布尼茨一句老掉牙的话: "世界上没有两片完全相同的叶子,也没有性格完全相同的人。

体现在Person类中就是不允许任何两个用户的名字相同,  首先从根源上杜绝禁止Person类的拷贝构造函数和赋值运算符.

这里使用 C++11 成员函数声明新特性: = delete,  从逻辑语义上禁止了对于 Person类拷贝构造函数和赋值运算符

 

使用g++ 命令编译

g++  -std=c++11         -g  -Wall            main.cpp   -o main

编译错误如下:  ( 记得开启 编译器 C++11 支持 )


main.cpp: In function ‘int main(int, char**)’:
main.cpp:37:17: error: use of deleted function ‘Person::Person(const Person&)’
     Person p2(p1);
                 ^
main.cpp:26:5: note: declared here
     Person(const Person &) = delete;

 

编译器明确提示了 在main函数中使用了 deleted function.  并且给出了行号,  错误原因一目了然用户看到这样的错误信息很快可以定位到问题所在.

并且注意一点:   " = delete "  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值