C++成员对象和封闭类
C++成员对象和封闭类详解
在C++中,成员对象是指一个类的成员变量,它本身是另一个类的对象。封闭类是包含这些成员对象的类。理解两者的关系和行为,对于构造函数、析构函数、初始化顺序以及内存布局等方面的理解非常重要。
1. 成员对象和封闭类的基本概念
成员对象
- 是一个类的成员变量,但类型是一个类。
- 通常用于实现组合(composition)关系。
- 在封闭类的生命周期中,成员对象的构造函数和析构函数被自动调用。
封闭类
- 是包含成员对象的类。
- 封闭类的构造函数负责调用成员对象的构造函数,析构函数负责调用成员对象的析构函数。
2. 成员对象的构造与析构
a. 构造顺序
- 成员对象在封闭类的构造函数执行之前初始化。
- 成员对象的初始化顺序与它们在类中声明的顺序一致,与初始化列表中的顺序无关。
#include <iostream>
class Member {
public:Member(int x) { std::cout << "Member Constructor: " << x << std::endl; }~Member() { std::cout << "Member Destructor" << std::endl; }
};class Container {Member m1;Member m2;
public:Container() : m2(20), m1(10) { // 初始化列表顺序与声明顺序不同std::cout << "Container Constructor" << std::endl;}~Container() {std::cout << "Container Destructor" << std::endl;}
}