一、noncopyable
????????在 C++ 中定义一个类时,如果不明确定义拷贝构造函数和拷贝赋值操作符,编译器会为我们自动生成这两个函数。
class ToolsStudy{
};
当我们定义了一个ToolsStudy的空类,编译器在处理它时会“默默地”为它增加拷贝构造函数和拷贝赋值操作符,真实代码类似于:
class ToolsStudy
{
public:
ToolsStudy(const ToolsStudy &) {
//...
}
ToolsStudy& operator=(const ToolsStudy&) {
//...
}
};
此时我们可以通过拷贝构造或者拷贝赋值操作符来创建对象:
ToolsStudy tool;
ToolsStudy tool1(tool);
ToolsStudy tool2 = tool1;
但有时候我们不需要类的拷贝语义,希望禁止拷贝实例,这时我们有以下两种方法:
1.私有化拷贝构造函数和拷贝赋值操作符(scoped_ptr采用了该方法)
class ToolsStudy
{
public:
ToolsStudy() {
}
private:
ToolsStudy(ToolsStudy const&);
ToolsStudy& operator=(ToolsStudy const&);
};
2.将此类继承自boost::noncopyable
boost::noncopyable delete了拷贝构造及赋值操作符。(具体可看boost::noncopyable类的实现)
noncopyable( const noncopyable& ) = delete; noncopyable& operator=( const noncopyable& ) = delete;
#include "boost/noncopyable.hpp"
class ToolsStudy:boost::noncopyable
{
};
|