C++构造函数中的不同内存地址

pro*_*eek 0 constructor g++

我在C++中有两个构造函数,一个构造函数调用另一个构造函数以便不复制初始化逻辑.

#include <iostream>
#include <memory>

using namespace std;

class A
{
    int x;
    int y;
public: 
    A(int x)
    {
        cout << this << endl;
        this->x = x;
    }

    A()
    {
        cout << this << endl;
        A(20);
    }

    ...
};
Run Code Online (Sandbox Code Playgroud)

有趣的是A()调用A(int),但是this指针指向不同的地址.为什么是这样?或者是这个g ++错误?

int main(int argc, char *argv[]) {
    A* a = new A();
}

0x7fa8dbc009d0 <-- from A()
0x7fff67d660d0 <-- from A(int)
Run Code Online (Sandbox Code Playgroud)

Kri*_*son 5

我相信A(20);在该构造函数中构造一个不同的A实例,而不是在同一个实例上调用另一个构造函数.

请参阅我可以在C++中从另一个构造函数(构造函数链接)调用构造函数吗?如何从构造函数中调用另一个构造函数.

如果您使用的是支持C++ 11的编译器,我认为您可以通过A()构造函数的这个定义实现您想要的:

A(): A(20)
{
    cout << this << endl;
}
Run Code Online (Sandbox Code Playgroud)