您的位置:首页 > 编程语言 > C语言/C++

Effective C++ .06 阻止编译器自动生成函数以及被他人调用

2014-12-21 15:52 281 查看
这节讲了下如何防止对象拷贝(隐藏并不能被其他人调用)

两种方法:

1. 将拷贝构造函数声明为private 并且声明函数但不进行定义

#include <iostream>
#include <cstdlib>

class Dummy {
public:
Dummy(int d = 0) : data(d) {}
Dummy* getCopy() {
Dummy* x = new Dummy(*this);
return x;
}
private:
int data;
Dummy(const Dummy& org);
};

int main() {

Dummy d(1);

// will case link error
d.getCopy();

// will case compile error
Dummy d2(d);

return 0;
}


不进行定义是防止被内部的函数调用,这样就会在链接的时候报错。

2. 继承一个拷贝构造函数和copy assignment函数为private的类,如05所述,默认的拷贝函数会调用父类和成员的对应拷贝函数,如果这个函数不能执行那么函数就无法被生成了

class Uncopyable {
public:
Uncopyable(){};
private:
Uncopyable(const Uncopyable&);
Uncopyable& operator=(const Uncopyable&);

};

class Fake: public Uncopyable {
private:
int data;
public:
Fake(int d): data(d){};
};

Fake f(1);
Fake f2(f);


[Note] 'Fake::Fake(const Fake&)' is implicitly deleted because the default definition would be ill-formed:

[Error] 'Uncopyable::Uncopyable(const Uncopyable&)' is private

这里也只能阻止默认拷贝
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐