C++の新機能はこちら。次の場合にメモリリークが発生する可能性がありますか?逆参照された文字列に割り当てる - これはメモリリークを引き起こす可能性がありますか?
// debug is optional, for debugging purposes.
// Say my_string is an internal string class my company uses.
int DoSomething(my_string *debug) {
const my_string& s = GetString();
if (debug != nullptr) *debug = s; // Could this cause a memory leak?
return DoSomethingElse(s);
}
私はここに私の理解をチェックしたい:私は、メモリの領域がdebug
で指さコメント行で考える著作がある場合を除き、単に、s
の内容(のコピー)で上書きされますmy_string
のために実装されたコンストラクタです。この場合、他にもいくつかの処理が行われる可能性があります。
my_string
の特別なコピーコンストラクタが存在しない場合、my_string
が内部表現で任意の動的に割り当てられたメモリを指している場合(これはおそらく任意の長さの文字列を保持できるため)、上記のコードはメモリリーク。
また、C++の「エチケット」に関するもう1つの質問は、誰かがmy_string
を書いた人が、このような場合にメモリリークを避けるためにコピーコンストラクタを書いたと仮定することができますか?つまり、私自身のコードにはnew
がありません。このコードがメモリリークを引き起こすのであれば、それは私の「誤り」ではないと言うのは妥当でしょうか?
EDIT:コピーコンストラクタではなく、上記のコピー代入演算子を意味すると思います。
'my_string'は、' std :: string'よりもむしろそれを使うために、*リークしないことを確認する単体テストのセットを持っている方が良いでしょう。もちろん、これは 'my_string'のリークを引き起こす可能性があります。そして、もしあなたが**知っていれば**それはとにかくそれを吸って、それを使用すると、間違いなくあなたはそれがあなたのせいだと断言できます。 – WhozCraig
多分はい、多分いいえ。ここに示されていないコードに依存します。 – juanchopanza
@WhozCraig @juanchopanza 'my_string'の実装にのみ依存するのですか、' GetString'と 'DoSomethingElse'にも依存していますか? – John