プライベート文字列ポインターを持つクラスがあります。このクラスには、その文字列ポインターを逆参照し、結果の文字列を呼び出し元に返す public メソッドもあります。私の質問はこれです: 逆参照された文字列を保持するメモリはどうなりますか?
これが私のコードです:
#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