首页 > 代码库 > Effective C++ .06 阻止编译器自动生成函数以及被他人调用
Effective C++ .06 阻止编译器自动生成函数以及被他人调用
这节讲了下如何防止对象拷贝(隐藏并不能被其他人调用)
两种方法:
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
这里也只能阻止默认拷贝
Effective C++ .06 阻止编译器自动生成函数以及被他人调用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。