- C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
156 :デフォルトの名無しさん[sage]:2015/09/05(土) 05:53:52.09 ID:zclI+Aoz - >>146で微妙に触れられている気がするが、OpenCVのC言語インターフェースで使う
IplImage* image = cvCreateImage(cvSize(10, 20), IPL_DEPTH_8U, 1); printf("width=%d, height=%d\n", image->width, image->height); cvReleaseImage(&image); // ←imageが指すオブジェクト解放後、image=NULLになる。 ていうか動的に確保・開放するリソース管理のなら、インターフェースを (1) 開放したらNULLになる (2) NULLの開放はNOP のコンボにすると悩み事が3〜4個減って良い
| - C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
157 :デフォルトの名無しさん[sage]:2015/09/05(土) 06:10:44.38 ID:zclI+Aoz - 悩み事が減るというのは、エラー処理でフローが複雑化しても単一の関数内でリソースの開放を確実に行い得る、の意味
errt = fopen_s(&fp, "sample.txt", "w"); if (errt != 0) { 関数を抜ける処理1; } p = malloc((size_t)1000000); if (p == NULL) { 関数を抜ける処理2; } みたいなケースにおいて、関数を抜ける処理1, 2それぞれでfpのclose()やpの確保状況に神経を使いつつ開放処理を書く羽目になるのを回避でくる、 というと古典的なプログラマーの中にはリソースを使うだけの関数を親関数から呼んで親関数で確保と開放をせよと言い出すが それをのべつまくなくやるのはコーディング労力の無駄遣いなので嫌
|
|