我在下面提到了C++ / MFC中的函数:

CString StringFunc()
{
    std::string abc = "Hello";

    return abc.c_str();

}

int main()
{
    CString Temp = StringFunc();

    Use_Temp(Temp);
}

1.)StringFunc()返回的abc.c_str()指针的生命周期是多少,在StringFunc()返回之后可以安全地将其复制到变量'Temp'吗?

2.)CString Temp = StringFunc()是浅复制操作还是深度复制?

最佳答案


abc将一直有效,直到StringFunc() function返回。是的,将副本返回到CString是安全的。

如果返回指向std::string::c_str()的指针,则很危险,例如:

const char* EvilFunc()  // bad, dont' do it
{
   std::string abc = "Hello";
   return abc.c_str();
}

const char* p = EvilFunc(); // p becomes wild pointer when EvilFunc returns



它是深复制。它从CString构造一个新的const char*对象

10-08 11:40