使用Boost对非值语义的C++类实现noncopyable

C++中的类根据用途可以分为如下三类:

1 值语义(数据抽象ADT):可以拷贝,拷贝之后和原来的对象没关系。

(1)如基础类型int等,容器类型vector,list,set等。Date类型、Timestamp类型。

(2)封装一些数据成员,并提供操作的接口。

(3)支持数据聚合

(4)支持函数重载、操作符重载

(5)效率无损

(6)模板与泛型

(7)是C++编程范式的重要一种

(8)生命周期和int一样无需管理

2 对象语义:不应该被拷贝noncopyable

2.1 基于对象(object-based):封装

2.2 面向对象(object-oriented):封装、消息传递。对应着资源(文件、员工、打印机、账号、套接字)

(1)生命期要管理

(2)引用语义

(3)智能指针参与

(4)noncopyable

综上所述,我们在开发的时候应该对所有的非值语义的类设置noncopyable

参考:《Linux多线程服务端编程》陈硕著

代码:

#include "boost/noncopyable.hpp"
#include <vector>
#include <iostream>

class Company : public boost::noncopyable
{
public:
	Company(){}
	~Company(){}
	void print(void){std::cout<<"company::print()"<<std::endl;}
};


int main(int, char *[])
{
	Company a;
	a.print();
	//Company b(a);//编译错误
	//Company b=a;//编译错误
	Company b;
	b.print();
	//b=a;//编译错误
	std::vector<Company> vc;//OK
	//vc.push_back(a);//编译错误
	return 0;
};
输出:
company::print()
company::print()
请按任意键继续. . .



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值