Win*_*mer 2 c++ mfc visual-studio-2010 object-lifetime visual-c++
我在 C++/MFC 中有下面提到的函数:
CString StringFunc()
{
std::string abc = "Hello";
return abc.c_str();
}
int main()
{
CString Temp = StringFunc();
Use_Temp(Temp);
}
Run Code Online (Sandbox Code Playgroud)
1.) StringFunc() 返回的 abc.c_str() 指针的生命周期是多少,在 StringFunc() 返回后它会安全地复制到变量“Temp”吗?
2.) CString Temp = StringFunc() 是浅复制操作还是深复制?
StringFunc() 返回的 abc.c_str() 指针的生命周期是多少,在 StringFunc() 返回后它会安全地复制到变量“Temp”吗?
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
Run Code Online (Sandbox Code Playgroud)
CString Temp = StringFunc() 是浅复制操作还是深复制?
这是深度复制。它构造一个新CString对象const char*