gpt4 book ai didi

c++ - 在 C++ 中使用初始化列表初始化数据成员引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:54 26 4
gpt4 key购买 nike

各位堆垛机,

考虑头文件中的以下两个简单类:

Class CC
{
public:
CC(int& value);
C& operator=(const C& other);
{
cout<<" From copy constructor ";
}

int m_cc;
};

Class AA
{
public:
AA( CC& refCC);

CC m_cInstance;
}

以下是.cpp文件中的内容。

CC:CC(int& value): m_cc(value)
{
cout<<" Constructor of CC" <<endl;
m_cc++;
}

AA:AA(CC& refCC): m_cInstance(refCC)
{
cout<<" The value of m_cc in refCC is: "<< refCC.m_cc;
cout<<" The address of m_cc in refCC is: "<< &refCC.m_cc;
cout<<" The address of refCC is: "<< &refCC;

cout<<" The value of m_cc in m_cInstance is: <<m_cInstance.m_cc;
cout<<" The address of m_cc in m_cInstance is: <<&m_cInstance.m_cc;
cout<<" The address of m_cInstance is: <<&m_cInstance;
}

我在我的 main.cpp 文件中按以下方式使用上面两个声明的简单类:

int 值 = 1000;CC refCC(cvalue);

AAaaObj(refCC);

这是程序的输出:

 Constructor of CC
The value of m_cc in refCC is: 1001
The address of m_cc in refCC is: 0x12ff20
The address of refCC is: 0x12ff20

The value of m_cc in m_cInstance is: 1001
The address of m_cc in m_cInstance is: 0x12ff14
The address of m_cInstance is: 0x12ff14

以下是一些观察结果:

  1. 注意实例AA中m_cInstance的地址与refCC的地址不同。

  2. 虽然CC的实例在AA的构造函数中是通过引用(refCC)传递的,但是成员变量“m_cInstance”本身就是一个单独的实例。

  3. 当“refCC”被创建时,CC 实例的构造函数被调用一次,即使在程序中存在两个不同的 CC 实例携带相同的状态。

  4. 永远不会调用覆盖的赋值运算符。

我的问题很简单:

如何在 AA 的构造函数中创建“m_cInstance”而不调用 CC 的构造函数或 CC 中定义的赋值运算符??

如果 CC 包含磁盘上文件的句柄作为成员变量呢?它在“m_cInstance”中的行为是什么??

谢谢,

德科斯托。

最佳答案

m_cInstance 是使用(在您的案例中提供的编译器)复制构造函数创建的。作为完整性检查,如果您需要定义赋值运算符,您可能还需要定义复制构造函数和析构函数(已知为三个 hereon wikipedia 的规则)

关于c++ - 在 C++ 中使用初始化列表初始化数据成员引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7001709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com