成员函数内的类实例化

Jim*_*ell 5 c++ oop recursion instantiation

在该类的成员函数中实例化一个类是安全的吗?例如,假设我有CMyClass成员函数的类CMyClass::MemberFunc,我想创建另一个CMyClass内部实例CMyClass::MemberFunc.

void CMyClass::MemberFunc( void )
{
    CMyClass * pMyClass = new CMyClass();
}
Run Code Online (Sandbox Code Playgroud)

这合法/安全吗?我知道它编译.我关心的是递归.当我CMyClass第一次从主应用程序实例化时,是否会遇到递归错误?

void main( void )
{
    static CMyClass * s_pMyClass = new CMyClass(); // Will this cause recursion?
}
Run Code Online (Sandbox Code Playgroud)

或者,只有在调用具有附加类实例的特定成员函数时,才会发生递归吗?

void CMyClass::MemberFunc( void )
{
    CMyClass * pMyClass = new CMyClass();
    pMyClass->MemberFunc(); // Pretty sure this will cause a recursive loop.
}
Run Code Online (Sandbox Code Playgroud)

换句话说,我可以安全地在该类的成员函数中实例化一个给定的类,只要我不调用该类的第二个实例的成员函数吗?谢谢.

dle*_*lev 3

这并不比实例化任何其他对象更安全或更不安全。请注意,在底部的示例中,递归严格基于方法调用自身的事实;无论如何,它都会无限期地递归。

总而言之:你应该没问题。