当我说你不应该在构造函数中使用'this'关键字而其他人说完全相反时,我会阅读一些文章....
现在我的主要问题是:它是否安全,在构造函数中使用'this'是一个好习惯吗?
这个问题导致其他人:
以下是在Windows 7上使用VS2012的一些示例:
class FirstClass
{
int m_A;
public:
FirstClass( int a ) : m_A( a )
{
std::cout << this->m_A << std::endl;
// ^^^^
}
};
Run Code Online (Sandbox Code Playgroud)
并且:
class ThirdClass; // forward decl
class SecondClass
{
public:
SecondClass( ThirdClass* iTC )
{
// ...
}
};
class ThirdClass
{
SecondClass* m_SC;
public:
ThirdClass():
m_SC( new SecondClass( this ) )
// ^^^^
{
//...
}
};
Run Code Online (Sandbox Code Playgroud)
这些例子是有效的,但是有可能存在未定义的行为吗?
由于对象及其成员的内存是在构造函数的调用之前分配的,因此this
指针本身的值不是问题:它可能是您可以解除引用的成员,这可能是一个问题.
您的第一代码段是有效的,因为this->m_A
是相同的m_A
,这是一个有效的表达式.
你的第二个代码片段可能也可能不行,具体取决于构造函数的SecondClass
作用:
SecondClass
构造函数只是存储指针以FirstClass
供将来使用,那就没问题SecondClass
构造函数调用指向要FirstClass
传递给它的指针的方法,则这不正常,因为this
指针所指向的实例尚未初始化. 归档时间: |
|
查看次数: |
168 次 |
最近记录: |