我有以下c ++代码。我可以在Linux机器上用g ++ 4.9.2编译它。然后,当我运行它时,它打印10.似乎创建了一个新对象并将其分配给在默认构造函数中使用const_cast创建的指针。没有内存泄漏(我使用valgrind检查)。这是某种未定义的行为还是合法的?
#include <iostream>
using namespace std;
class A
{
public:
A() : x(0)
{
A *tmp = const_cast<A*>(this);
*tmp = A(10);
}
A(int x)
{
this->x = x;
}
int getX() const
{
return x;
}
private:
int x;
};
int main()
{
A a;
cout << a.getX() << endl;
return 0;
}
答案 0 :(得分:4)
Users 0..1 - 0..* Logins
与您遇到的行为无关。您的代码可能会简化为以下内容:
const_cast
因此,如果我们想使用默认构造函数创建对象,则会发生以下情况:
A() : x(0)
{
*this = A(10);
}
的内存。this
已分配给0
的成员x
。this
创建类A
的新(未命名)对象。此新对象成员A(int)
的值为x
。10
。因此,*this
的成员x
的值为this
。10
已退回。这是完全合法和预期的行为。