Effective C++ 条款06:若不想使用编译器自动生成的函数,就该明确拒绝

1. 某些类的含义决定了它们不具备某些功能,也就是说某些函数不能被创造出来以防被错误的使用(例如定义一个Book类,它含有一个表示ISBN的变量,这种情况下拷贝构造函数以及赋值操作符显然是没有意义的,因为任何两种书的ISBN都不同),但是编译器在类的创建者没有声明默认构造函数,拷贝构造函数,赋值操作符和析构函数的情况下会产生这些函数,为了避免这种情况,可以将这些函数声明为private并且不提供它们的定义来阻止它们的使用,但是如果这些函数经由其他成员函数或者友元函数调用,错误将会在链接期才能被发现(类的定义与使用通常在不同文件中).

2. 为了将链接期错误提前至编译期,可以设置一个只含有这些函数的声明且设为private的基类,然后用目标类来继承它.随之而来的缺点就是继承所带来的效率降低以及可能导致的多重继承的出现进而阻止"empty base class optimization".

#ifndef _ScriptHandler_H_
#define _ScriptHandler_H_

class ScriptHandler {
public:
	ScriptHandler();
	~ScriptHandler();
public:
	bool RunScript();
	bool RunRScript(RedeScreenPtr scr);	
    ScriptPtr getScriptByCmd(short cmd);
private:
	DList<DList<Script> >* script_lists;
	DList<DVector<int> >* script_index_lists;
private:
	/*
	* 禁止对象拷贝,声明私有方法并且不实现
	*/
	ScriptHandler(const ScriptHandler&);
	ScriptHandler& operator=(const ScriptHandler&);
};

#endif

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值