お世話になります_(._.)_
picojsonというパーサを読んでいます。
分からないのは、以下に該当するコードです。deleteしていないのに、配置newしたオブジェクトがメモリリークしないのはなぜなのでしょうか。
[C++]自壊と配置new、自動的な開放?
Re: [C++]自壊と配置new、自動的な開放?
こんにちは。
配置new(プレースメントnew)の理解がまだ追いついていない状態でしょうか…?
これはメモリを確保しているわけではないですよ。
指定したメモリをクラスで初期化しているだけです。
memsetなどに近い、と言えば伝わるでしょうか?
やっていることを文章で説明すると、
「thisとxが違うものである場合、デストラクタを呼んだ後に
xを引数としてnewで初期化(コンストラクタの呼び出しなど)し、thisを返却する」
というものかと思います。
配置new(プレースメントnew)の理解がまだ追いついていない状態でしょうか…?
これはメモリを確保しているわけではないですよ。
指定したメモリをクラスで初期化しているだけです。
memsetなどに近い、と言えば伝わるでしょうか?
やっていることを文章で説明すると、
「thisとxが違うものである場合、デストラクタを呼んだ後に
xを引数としてnewで初期化(コンストラクタの呼び出しなど)し、thisを返却する」
というものかと思います。
Re: [C++]自壊と配置new、自動的な開放?
こんにちは。ご回答ありがとうございました。
> 配置new
引数の位置に領域を確保する、という意味のwebの文だけを読んで誤解していました。
(最後まで読めば全く違うことが書いてあったのですが…)
それと、デストラクタの明示的な呼び出しを誤解していました。
deleteと混同し、デストラクタを呼べば寿命になるのかと思っていました。
中身がすり替わっているのに、同じ領域を使っているから、元のオブジェクトのoperator delete(?)で開放できてしまうのが面白かったです。
> 配置new
引数の位置に領域を確保する、という意味のwebの文だけを読んで誤解していました。
(最後まで読めば全く違うことが書いてあったのですが…)
それと、デストラクタの明示的な呼び出しを誤解していました。
deleteと混同し、デストラクタを呼べば寿命になるのかと思っていました。
中身がすり替わっているのに、同じ領域を使っているから、元のオブジェクトのoperator delete(?)で開放できてしまうのが面白かったです。