0

我在 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);
    }

    ...
};

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

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

0x7fa8dbc009d0 <-- from A()
0x7fff67d660d0 <-- from A(int)
4

2 回答 2

5

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

请参阅Can I call a constructor from another constructor (do constructor chaining) in C++? 关于如何从构造函数调用另一个构造函数。

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

A(): A(20)
{
    cout << this << endl;
}
于 2013-06-19T21:18:07.530 回答
1

A(20);是构造 的新实例的语句A,而不是对A的构造函数的调用this

您不能在 C++03 中的给定构造函数中调用另一个构造函数重载。但是,您可以使用placement new 来实现相同的效果。代替:

A(20);

在您的代码中:

new (this) A(20);
于 2013-06-19T21:32:58.727 回答