C++二阶构造模式和友元详解 C++ 二阶构造模式是指在创建对象时,分为两个阶段的构造过程。第一阶段是资源无关的初始化操作,第二阶段是需要使用系统资源的操作。这种模式可以避免半成品对象的出现。 在 C++ 中,构造函数用于对象的初始化,但它没有返回值,不能判断执行结果。因此,在创建对象时,如果构造函数执行失败,可能会出现bug。二阶构造模式可以解决这个问题。 二阶构造模式的步骤如下: 1. 创建一个私有的构造函数,用于第一阶段构造。 2. 创建一个私有的有返回值函数,用于第二阶段构造。 3. 创建一个静态成员函数,通过 new 创建一个对象,然后调用第一阶段和第二阶段的函数,最后进行判断处理。 例如: ```c class TwoPhaseCons { private: TwoPhaseCons() {} // 第一阶段构造函数 bool construct() { return true; } // 第二阶段构造函数 public: static TwoPhaseCons* NewObj(); // 对象创建函数 }; TwoPhaseCons* TwoPhaseCons::NewObj() { TwoPhaseCons* ret = new TwoPhaseCons(); if (!(ret && ret->construct())) { delete ret; ret = NULL; } return ret; } ``` 友元(Friend)是 C++ 中的一种机制,允许其他类或函数访问当前类的私有成员变量。友元可以是函数,也可以是另一个类。 友元的定义是在类中使用 friend 关键字来声明。例如: ```c class Test { friend void f_func(const Test& t); // 声明f_func()是该类的友元 }; ``` 友元的好处是方便快捷,但坏处是破坏了面向对象的封装性。 例如,通过 Test 类的友元(函数)来访问成员变量: ```c void f_func(const Test& t) { printf("t.x=%d\n", t.x); printf("t.y=%d\n", t.y); printf("t.n=%d\n", t.n); // 访问私有静态成员变量 } ``` 通过 A 类的友元(B 类)来访问成员变量: ```c class A { int i; friend class B; // 声明 B 是 A 的友元 }; class B { public: void accessA(A& a) { a.i = 10; // 访问 A 的私有成员变量 } }; ``` C++ 二阶构造模式和友元是两个重要的概念,前者可以避免半成品对象的出现,后者可以方便快捷地访问私有成员变量,但需要注意封装性的破坏。
- 粉丝: 45
- 资源: 932
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助