QA@IT
«回答へ戻る

5599
 正確には「メモリの管理が他の言語より面倒を見ないといけない場面が多い」になるかと思います。
 自動変数とか動的に確保しなかったクラスなどはC#同様勝手に開放されます。
 
-ライブラリ(Boost)を使ってオートポインタとかスマートポイントを使えば最近の言語と同じ様に自動解放の恩恵にもあずかることもできます。
+ライブラリ(Boost他)を使ってオートポインタとかスマートポイントを使えば最近の言語と同じ様に自動解放の恩恵にもあずかることもできます。
 (C++11からは標準ライブラリにスマートポインタが加わっています。VC++の場合C++/CLIという .NET寄りなC++だとそれはそれで話が違ってきます(gcnewなど)。)
 
 そういったライブラリを使わない場合、自分で確保(`new`, `malloc`)したメモリは自分で責任をもって解放(`delete`, `free`)しなければいけません。たとえばC#でもいろいろnewしたりして確保はしますが、それらすべてをアプリケーションが終了するまでにdeleteという命令で解放しなければならなくなると思ってください。

普通のC++の話ですよね?

正確には「メモリの管理が他の言語より面倒を見ないといけない場面が多い」になるかと思います。
自動変数とか動的に確保しなかったクラスなどはC#同様勝手に開放されます。

ライブラリ(Boost他)を使ってオートポインタとかスマートポイントを使えば最近の言語と同じ様に自動解放の恩恵にもあずかることもできます。
(C++11からは標準ライブラリにスマートポインタが加わっています。VC++の場合C++/CLIという .NET寄りなC++だとそれはそれで話が違ってきます(gcnewなど)。)

そういったライブラリを使わない場合、自分で確保(new, malloc)したメモリは自分で責任をもって解放(delete, free)しなければいけません。たとえばC#でもいろいろnewしたりして確保はしますが、それらすべてをアプリケーションが終了するまでにdeleteという命令で解放しなければならなくなると思ってください。

それだけ聞くとそんなに難しく無いように思えるかもしれませんが、同じデータやインスタンス
を複数の箇所で利用していた場合、どのタイミングでなら解放していいのかという判断はなかなか難しいものですし、解放処理をどこに書けばいいのか、エラーが起きてもきちんと解放できるかなどを気にしなければいけません。

C#でもきちんとしたコードでないとメモリの解放漏れが起こります。
usingで開放できるような程度の物ならいいですが、画像処理なんかでは気をつけないと結構解放忘れが起こります(PictureBoxに表示中だと解放できないとかけっこう面倒なものもあったり)。なので自動的に開放してくれる言語であっても、dotPeekといったメモリ管理製品などが存在したりしますね。

話がそれましたが、CやC++では自分で動的に確保したメモリは自分で解放しなければいけません。また確保するにあたってもきちんと自分でどれくらい必要なのか判断して用意しないといけません。

スマートポインタなどの便利機能が使えるかどうかは現場の流儀だとか開発するものの制約(パソコンではなくもっと小さな機械では使えるメモリやパワーが足りなくてライブラリの使用を見送る場合もあります)などにも依ってくるでしょう。

普通のC++の話ですよね?

正確には「メモリの管理が他の言語より面倒を見ないといけない場面が多い」になるかと思います。
自動変数とか動的に確保しなかったクラスなどはC#同様勝手に開放されます。

ライブラリ(Boost他)を使ってオートポインタとかスマートポイントを使えば最近の言語と同じ様に自動解放の恩恵にもあずかることもできます。
(C++11からは標準ライブラリにスマートポインタが加わっています。VC++の場合C++/CLIという .NET寄りなC++だとそれはそれで話が違ってきます(gcnewなど)。)

そういったライブラリを使わない場合、自分で確保(`new`, `malloc`)したメモリは自分で責任をもって解放(`delete`, `free`)しなければいけません。たとえばC#でもいろいろnewしたりして確保はしますが、それらすべてをアプリケーションが終了するまでにdeleteという命令で解放しなければならなくなると思ってください。

それだけ聞くとそんなに難しく無いように思えるかもしれませんが、同じデータやインスタンス
を複数の箇所で利用していた場合、どのタイミングでなら解放していいのかという判断はなかなか難しいものですし、解放処理をどこに書けばいいのか、エラーが起きてもきちんと解放できるかなどを気にしなければいけません。


C#でもきちんとしたコードでないとメモリの解放漏れが起こります。
usingで開放できるような程度の物ならいいですが、画像処理なんかでは気をつけないと結構解放忘れが起こります(PictureBoxに表示中だと解放できないとかけっこう面倒なものもあったり)。なので自動的に開放してくれる言語であっても、dotPeekといったメモリ管理製品などが存在したりしますね。

話がそれましたが、CやC++では自分で動的に確保したメモリは自分で解放しなければいけません。また確保するにあたってもきちんと自分でどれくらい必要なのか判断して用意しないといけません。

スマートポインタなどの便利機能が使えるかどうかは現場の流儀だとか開発するものの制約(パソコンではなくもっと小さな機械では使えるメモリやパワーが足りなくてライブラリの使用を見送る場合もあります)などにも依ってくるでしょう。

5599
 自動変数とか動的に確保しなかったクラスなどはC#同様勝手に開放されます。
 
 ライブラリ(Boost)を使ってオートポインタとかスマートポイントを使えば最近の言語と同じ様に自動解放の恩恵にもあずかることもできます。
-(C++11からは標準ライブラリにスマートポインタが加わっています。VC++の場合C++/CLIという .NET寄りなC++だと話が違ってきます。)
+(C++11からは標準ライブラリにスマートポインタが加わっています。VC++の場合C++/CLIという .NET寄りなC++だとそれはそれで話が違ってきます(gcnewなど)。)
 
 そういったライブラリを使わない場合、自分で確保(`new`, `malloc`)したメモリは自分で責任をもって解放(`delete`, `free`)しなければいけません。たとえばC#でもいろいろnewしたりして確保はしますが、それらすべてをアプリケーションが終了するまでにdeleteという命令で解放しなければならなくなると思ってください。
 

普通のC++の話ですよね?

正確には「メモリの管理が他の言語より面倒を見ないといけない場面が多い」になるかと思います。
自動変数とか動的に確保しなかったクラスなどはC#同様勝手に開放されます。

ライブラリ(Boost)を使ってオートポインタとかスマートポイントを使えば最近の言語と同じ様に自動解放の恩恵にもあずかることもできます。
(C++11からは標準ライブラリにスマートポインタが加わっています。VC++の場合C++/CLIという .NET寄りなC++だとそれはそれで話が違ってきます(gcnewなど)。)

そういったライブラリを使わない場合、自分で確保(new, malloc)したメモリは自分で責任をもって解放(delete, free)しなければいけません。たとえばC#でもいろいろnewしたりして確保はしますが、それらすべてをアプリケーションが終了するまでにdeleteという命令で解放しなければならなくなると思ってください。

それだけ聞くとそんなに難しく無いように思えるかもしれませんが、同じデータやインスタンス
を複数の箇所で利用していた場合、どのタイミングでなら解放していいのかという判断はなかなか難しいものですし、解放処理をどこに書けばいいのか、エラーが起きてもきちんと解放できるかなどを気にしなければいけません。

C#でもきちんとしたコードでないとメモリの解放漏れが起こります。
usingで開放できるような程度の物ならいいですが、画像処理なんかでは気をつけないと結構解放忘れが起こります(PictureBoxに表示中だと解放できないとかけっこう面倒なものもあったり)。なので自動的に開放してくれる言語であっても、dotPeekといったメモリ管理製品などが存在したりしますね。

話がそれましたが、CやC++では自分で動的に確保したメモリは自分で解放しなければいけません。また確保するにあたってもきちんと自分でどれくらい必要なのか判断して用意しないといけません。

スマートポインタなどの便利機能が使えるかどうかは現場の流儀だとか開発するものの制約(パソコンではなくもっと小さな機械では使えるメモリやパワーが足りなくてライブラリの使用を見送る場合もあります)などにも依ってくるでしょう。

普通のC++の話ですよね?

正確には「メモリの管理が他の言語より面倒を見ないといけない場面が多い」になるかと思います。
自動変数とか動的に確保しなかったクラスなどはC#同様勝手に開放されます。

ライブラリ(Boost)を使ってオートポインタとかスマートポイントを使えば最近の言語と同じ様に自動解放の恩恵にもあずかることもできます。
(C++11からは標準ライブラリにスマートポインタが加わっています。VC++の場合C++/CLIという .NET寄りなC++だとそれはそれで話が違ってきます(gcnewなど)。)

そういったライブラリを使わない場合、自分で確保(`new`, `malloc`)したメモリは自分で責任をもって解放(`delete`, `free`)しなければいけません。たとえばC#でもいろいろnewしたりして確保はしますが、それらすべてをアプリケーションが終了するまでにdeleteという命令で解放しなければならなくなると思ってください。

それだけ聞くとそんなに難しく無いように思えるかもしれませんが、同じデータやインスタンス
を複数の箇所で利用していた場合、どのタイミングでなら解放していいのかという判断はなかなか難しいものですし、解放処理をどこに書けばいいのか、エラーが起きてもきちんと解放できるかなどを気にしなければいけません。


C#でもきちんとしたコードでないとメモリの解放漏れが起こります。
usingで開放できるような程度の物ならいいですが、画像処理なんかでは気をつけないと結構解放忘れが起こります(PictureBoxに表示中だと解放できないとかけっこう面倒なものもあったり)。なので自動的に開放してくれる言語であっても、dotPeekといったメモリ管理製品などが存在したりしますね。

話がそれましたが、CやC++では自分で動的に確保したメモリは自分で解放しなければいけません。また確保するにあたってもきちんと自分でどれくらい必要なのか判断して用意しないといけません。

スマートポインタなどの便利機能が使えるかどうかは現場の流儀だとか開発するものの制約(パソコンではなくもっと小さな機械では使えるメモリやパワーが足りなくてライブラリの使用を見送る場合もあります)などにも依ってくるでしょう。

回答を投稿

普通のC++の話ですよね?

正確には「メモリの管理が他の言語より面倒を見ないといけない場面が多い」になるかと思います。
自動変数とか動的に確保しなかったクラスなどはC#同様勝手に開放されます。

ライブラリ(Boost)を使ってオートポインタとかスマートポイントを使えば最近の言語と同じ様に自動解放の恩恵にもあずかることもできます。
(C++11からは標準ライブラリにスマートポインタが加わっています。VC++の場合C++/CLIという .NET寄りなC++だと話が違ってきます。)

そういったライブラリを使わない場合、自分で確保(new, malloc)したメモリは自分で責任をもって解放(delete, free)しなければいけません。たとえばC#でもいろいろnewしたりして確保はしますが、それらすべてをアプリケーションが終了するまでにdeleteという命令で解放しなければならなくなると思ってください。

それだけ聞くとそんなに難しく無いように思えるかもしれませんが、同じデータやインスタンス
を複数の箇所で利用していた場合、どのタイミングでなら解放していいのかという判断はなかなか難しいものですし、解放処理をどこに書けばいいのか、エラーが起きてもきちんと解放できるかなどを気にしなければいけません。

C#でもきちんとしたコードでないとメモリの解放漏れが起こります。
usingで開放できるような程度の物ならいいですが、画像処理なんかでは気をつけないと結構解放忘れが起こります(PictureBoxに表示中だと解放できないとかけっこう面倒なものもあったり)。なので自動的に開放してくれる言語であっても、dotPeekといったメモリ管理製品などが存在したりしますね。

話がそれましたが、CやC++では自分で動的に確保したメモリは自分で解放しなければいけません。また確保するにあたってもきちんと自分でどれくらい必要なのか判断して用意しないといけません。

スマートポインタなどの便利機能が使えるかどうかは現場の流儀だとか開発するものの制約(パソコンではなくもっと小さな機械では使えるメモリやパワーが足りなくてライブラリの使用を見送る場合もあります)などにも依ってくるでしょう。

普通のC++の話ですよね?

正確には「メモリの管理が他の言語より面倒を見ないといけない場面が多い」になるかと思います。
自動変数とか動的に確保しなかったクラスなどはC#同様勝手に開放されます。

ライブラリ(Boost)を使ってオートポインタとかスマートポイントを使えば最近の言語と同じ様に自動解放の恩恵にもあずかることもできます。
(C++11からは標準ライブラリにスマートポインタが加わっています。VC++の場合C++/CLIという .NET寄りなC++だと話が違ってきます。)

そういったライブラリを使わない場合、自分で確保(`new`, `malloc`)したメモリは自分で責任をもって解放(`delete`, `free`)しなければいけません。たとえばC#でもいろいろnewしたりして確保はしますが、それらすべてをアプリケーションが終了するまでにdeleteという命令で解放しなければならなくなると思ってください。

それだけ聞くとそんなに難しく無いように思えるかもしれませんが、同じデータやインスタンス
を複数の箇所で利用していた場合、どのタイミングでなら解放していいのかという判断はなかなか難しいものですし、解放処理をどこに書けばいいのか、エラーが起きてもきちんと解放できるかなどを気にしなければいけません。


C#でもきちんとしたコードでないとメモリの解放漏れが起こります。
usingで開放できるような程度の物ならいいですが、画像処理なんかでは気をつけないと結構解放忘れが起こります(PictureBoxに表示中だと解放できないとかけっこう面倒なものもあったり)。なので自動的に開放してくれる言語であっても、dotPeekといったメモリ管理製品などが存在したりしますね。

話がそれましたが、CやC++では自分で動的に確保したメモリは自分で解放しなければいけません。また確保するにあたってもきちんと自分でどれくらい必要なのか判断して用意しないといけません。

スマートポインタなどの便利機能が使えるかどうかは現場の流儀だとか開発するものの制約(パソコンではなくもっと小さな機械では使えるメモリやパワーが足りなくてライブラリの使用を見送る場合もあります)などにも依ってくるでしょう。