//类的初始化列表构造顺序:
//用类的成员变量做成员变量初始化列表构造函数的参数的执行顺序和构造顺序:
//构造形式如下:
/**********************************************************/
//class DeviceManager {
//public:
// DeviceManager():m_gm(&m_gpu, &m_memory)
// {
// cout << "DeviceManager" << endl;
// }
//private:
// GPU m_gpu;
// Memory m_memory;
// GPU_MEM m_gm;
//};
/**********************************************************/
//上述类的构造是如何进行构造的?
//并且各个函数的执行初始化的顺序是如何?
//为什么类的成员变量,能给类的成员变量的初始化列表构造函数做参数?
#include <iostream>
using namespace std;
class GPU {
public:
GPU()
{
cout << "GPU" << " 的构造函数被执行" << endl;
}
private:
int m_gpuId = 1;
};
class Memory {
public:
Memory()
{
cout << "Memory" << " 的构造函数被执行" << endl;
}
private:
int m_memSize = 2;
};
class GPU_MEM
{
public:
GPU_MEM(GPU* m_gpu, Memory* m_memory){
m_GPU = m_gpu;
m_MEMORY = m_memory;
cout << "GPU_MEM" << " 的构造函数被执行" << endl;
}
protected:
private:
GPU* m_GPU;
Memory* m_MEMORY;
};
class DeviceManager {
public:
DeviceManager():m_gm(&m_gpu, &m_memory)
{
cout << "DeviceManager" << " 的构造函数被执行" << endl;
}
//初始化参数列表(用“,”隔开)的初始化顺序是不确定的
//DeviceManager() :m_gm(&m_gpu, &m_memory), m_memory(5), m_gpu(6)
private:
GPU m_gpu;
Memory m_memory;
GPU_MEM m_gm;
};
int main()
{
DeviceManager deviceManager;
return 0;
}
运行结果: