我在下面提到了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*
对象