2017-06-21 10 views
-2

は、私は次のコード例では、共有のポインタについての基本的な疑問を持っている:共有ポインタを演算子=に置き換えてメモリリークを引き起こしますか?

int main() { 
std::shared_ptr<int> sp; // empty 
std::shared_ptr<int> sp2; 
sp.reset (new int); 
sp2.reset (new int); 
*sp=10; 
*sp2=400; 
    sp2=sp; 

std::shared_ptr<int> sp3; 
sp3=sp1; 
//what happens with the int of value 400? 
//more code 
} 

値400の整数で何が起こりますか?これはメモリリークですか?これは基本的な例ですが、intの代わりにポインタが大きなクラスを指していた場合、メモリリークがあった場合には問題があり、sp2が何度も再割り当てされると問題が発生します。感謝! ありがとう!

+0

'* sp = 10'と書いていますか?あなたが 'sp = std :: make_shared (10);'を意味するのであれば、もっと意味があります。 –

+0

yea申し訳ありませんが、それらの行を忘れてしまいました –

+2

もちろん、リークはありません。 'sp2'は400を含むintの唯一の所有者なので、 'sp2'が' sp'が所有するメモリの共有所有権を得る前に破棄されます。 – Praetorian

答えて

2

あなたの編集後、漏れはありません。 の値が400のメモリは、割り当て時に削除されます。

関連する問題