您的位置:首页 > 其它

不可复制类的原理和实现

2014-08-08 01:16 225 查看
主要原理在三、四两条

一.拷贝构造函数与赋值操作符

class A;

A a;

A b1(a); //拷贝构造函数的实例

A b2 = a; //赋值操作符的实例:

二.拷贝构造函数的应用实例

1.同一类型的对象显示或隐式初始化一个对象,如下:

class A;

A a;

A b(a);

2.作为函数的实参,如下:

void work(const A& a);

3.作为函数的返回值

A& getA() const

{



return a;

}

4.初始化顺序容器的元素

5.根据元素初始化式列表初始化数组元素

三.合成的拷贝构造函数和合成的赋值操作符,如下:

如果用户没有显式定义复制构造函数或赋值操作符,编译器将会默认的合成一个复制构造
函数。合成复制构造函数与复制构造函数,或者合成赋值操作符与赋值操作符不同,编译器默认合成的函数的执行行为是"逐个成员初始化",将新对象初始化为原对象的副本。逐个成员初始化不包括static成员,只负责初始化非static成员。

四.如上所述,为了防止复制和赋值,类可以显示声明其拷贝构造函数和赋值操作符为private,如果拷贝构造函数是私有的,将不允许用户代码复制该类类型的对象,编译器将拒绝任何进行复制的尝试。此时,类的友元和成员仍可以复制,当然要想禁止这种情况,也很容易实现。下面是不可复制类的代码:

class NonCopyable
{
protected:
NonCopyable(){}
~NonCopyable(){}
private:
NonCopyable(const NonCopyable &);
const NonCopyable& operator=(const NonCopyable&);
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: