我有一个具有私有字符串指针的类。此类还有一个公共方法,该方法取消引用该字符串指针并将结果字符串返回给调用者。我的问题是:保存取消引用字符串的内存会发生什么?
这是我的代码:
#include <iostream>
#include <string>
class myclass
{
private:
std::string *_name;
public:
myclass()
{
this->_name = new std::string("my name");
}
~myclass()
{
delete this->_name;
}
std::string getName()
{
return *this->_name;
}
};
void main()
{
myclass m;
{
std::string str = m.getName(); //what happens to this memory?
std::cout << str << std::endl;
} //str deleted here (I think)
//here, the m._name pointer hasn't yet been deleted
}
在我的主函数中,变量str
被分配了取消引用的字符串。保存这个字符串的内存会发生什么?我认为内存保留在堆栈上,因此当变量超出范围时会自动“取消分配”。令我困惑的是,即使取消引用的字符串不再在范围内,私有字符串指针仍可能在范围内。变量是否str
被分配了私有_name
指针值的副本?
如果此代码确实在后台复制字符串,我是否应该担心性能。如果我只getName()
返回_name
指针而不取消引用它,我的代码会运行得更快吗?