现在的位置: 首页 > 综合 > 正文

如何禁止对象的拷贝和赋值操作

2013年07月04日 ⁄ 综合 ⁄ 共 784字 ⁄ 字号 评论关闭
     在c++的实现过程中,我们在有些特殊情况下,往往希望禁止对象的拷贝和赋值操作,最常见的方法是把对应类中的拷贝构造函数和赋值函数定义为私有类型,并且没有任何实现代码。这样做的好处在于编译器能在编译期间帮助程序员发现错误,即使编译能够通过,也会在链接期间发现错误。
    对于这些重复的劳动是令人讨厌的,我们是否有一种相对容易的方法来实现这些限制呢?继承的特性能够轻易的搞定这些罗嗦的事情,只要我们在对应类的声明中私有继承下面的类就万事大吉了:-)。你是否觉得很爽呢?!
class Noncopyable
{
    Noncopyable& operator=( const Noncopyable &rhs );
    Noncopyable( const Noncopyable &rhs );

protected:

    Noncopyable(){}
    virtual ~Noncopyable(){}
};

测试它!
#include <iostream>

using namespace std;

class Noncopyable
{
    Noncopyable& operator=( const Noncopyable &rhs );
    Noncopyable( const Noncopyable &rhs );
protected:

    Noncopyable(){}
    virtual ~Noncopyable(){}
};

class C : private Noncopyable
{
public:
    C()
    {
        cout << "C constructor" << endl;
    }
    virtual ~C()
    {
        cout << "C destructor" << endl;
    }
};

int main( void )
{
    C c1;
    C c2 = c1;
    C c3;

    c3 = c1;

    return 0;
}

抱歉!评论已关闭.