2
我有以下的C++代码。我可以在Linux机器上用g ++ 4.9.2编译它。然后当我运行它时,它会打印10.看起来,创建了一个新对象并将其分配给在默认构造函数中使用const_cast创建的指针。没有内存泄漏(我使用valgrind检查过)。这是某种未定义的行为还是合法的?“this”指针上的const_cast是一个未定义的行为?
#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;
}
'this'不应该在构造函数中是const,所以const-cast什么也不做。 – tkausl
“没有内存泄漏” - 我不希望这样,因为在整个源代码中没有一个动态分配。无论如何,我敢问你为什么要在构造函数中const_fast这个'this'? – WhozCraig
'const_cast'与它无关。你可以做'* this = A(10)'。或'x = 10' :-) –