最容易想到的是将拷贝构造函数与赋值函数声明为private。但是,private只是说外部不能直接调用,但是可以间接通过类的成员函数与友元函数对其访问。那么怎么办呢?
----》在类中,允许声明函数,但是,可以不用实现该函数,这是合法的。那么即使是在public中声明函数,但是不实现,那么调用这个函数也是会出错的。
那么好了我们可以特性一起使用,将拷贝构造函数与赋值函数,声明为private,并且不给出实现。这样就实现了类复制的完全禁止。
用户代码中的复制尝试将在编译时标记为错误,而成员函数与友元函数中的复制尝试将在链接时出现错误。
上面介绍的这种技术在你熟悉的std::iostream类中已经得到了很好的应用,诸如ios_base、basic_ios和sentry,都采用这样的方式不允许复制操作。
Boost为我们提供了另一种解决方式,这种方式更加完美,因为它可以将链接错误提前到编译时,毕竟早一点发现错误比晚发现要好。
特意声明一个不可复制的类boost::noncopyable
#ifndef BOOST_NONCOPYABLE_HPP_INCLUDED
#define BOOST_NONCOPYABLE_HPP_INCLUDED
namespace boost {