[英]Is const_cast on “this” pointer an undefined behavior?
我有以下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;
}
const_cast
与您遇到的行为无关。 您的代码可以简化为以下内容:
A() : x(0)
{
*this = A(10);
}
因此,如果要使用默认构造函数创建对象,则会发生以下情况:
this
被保留。 0
分配给this
的成员x
。 A
使用构造创建A(int)
这个新的对象成员x
值为10
。 *this
。 因此,部件的值x
的this
becames 10
。 this
被返回。 这是完全合法和预期的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.