C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C++のコードの問題点


(過去ログ 105 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■62829 / inTopicNo.1)  C++のコードの問題点
  
□投稿者/ こみや (1回)-(2011/11/04(Fri) 22:06:16)

分類:[C/C++] 

以下のコードに問題点(メモリ管理が不適切)があるようなのですが
どなたかおわかりになるでしょうか?

class Base {
public:
Base(){ ptr = new int; };
~Base(){ delete ptr; };

private:
int* ptr;
};

class Derivative : public Base {
public:
Derivative(){};
~Derivative(){};
}

引用返信 編集キー/
■62830 / inTopicNo.2)  Re[1]: C++のコードの問題点
□投稿者/ Azulean (869回)-(2011/11/05(Sat) 00:45:58)
2011/11/05(Sat) 00:46:26 編集(投稿者)

No62829 (こみや さん) に返信
> 以下のコードに問題点(メモリ管理が不適切)があるようなのですが
> どなたかおわかりになるでしょうか?

どうしてそれをご質問されたのでしょうか?
何らかの課題ならば、ご自身で調べることが重要だと思います。
質問すれば答えを得られるかもしれませんが、調べる力を求められている状況下で安易に人に頼るのはよくありませんよ。
引用返信 編集キー/
■62869 / inTopicNo.3)  Re[1]: C++のコードの問題点
□投稿者/ とっちゃん (610回)-(2011/11/07(Mon) 11:46:27)
とっちゃん さんの Web サイト
No62829 (こみや さん) に返信
> 以下のコードに問題点(メモリ管理が不適切)があるようなのですが
> どなたかおわかりになるでしょうか?

PC向けの現行コンパイラであれば、このコードでメモリ管理に不適切なところがあるというのは
ちょっと無理がありますね。

何を持って不適切としているのか?がわからないので何とも言えませんが

今年の初めころに話題になったネタを張っておきます(一応自分のブログ)
http://blogs.wankuma.com/tocchann/archive/2011/02/20/197128.aspx


VS2010での動作確認しかしていませんが、メモリリークは起こしていません。

多分、このあたりが論点じゃないかなぁ?という気がします。

ちなみにブログの話題は、メモリの問題ではなく例外の話題です。
でも、コードがよく似ていたので参考記事として貼り付けておきます。

引用返信 編集キー/
■62871 / inTopicNo.4)  Re[2]: C++のコードの問題点
□投稿者/ 774RR (622回)-(2011/11/07(Mon) 12:43:47)
> 何を持って不適切としているのか?がわからないので何とも言えませんが
御意。

宿題なのだったら週明けてもう提出日だろうし、そろそろネタにしてみるのも善哉。

不具合1.派生を許している/派生させているのに「Base のデストラクタが virtual でない」
不具合2.コピーコンストラクタ・代入演算子を明示していない
不具合3.ポインタメンバ ptr は Base/Derivative コンストラクタ内で throw されても delete されない

1は解説するまでもないだろう。
2は shallow copy と deep copy で検索してみるとわかることがあるだろう。
3はとっちゃん様 blog とかでも解説あるとおりかな・・・

# こうやって振り返ると C++ って罠だらけな言語なのね

引用返信 編集キー/
■62873 / inTopicNo.5)  Re[3]: C++のコードの問題点
□投稿者/ とっちゃん (611回)-(2011/11/07(Mon) 13:13:20)
とっちゃん さんの Web サイト
No62871 (774RR さん) に返信
>>何を持って不適切としているのか?がわからないので何とも言えませんが
> 御意。
>
> 宿題なのだったら週明けてもう提出日だろうし、そろそろネタにしてみるのも善哉。
>
でしょうね。これで一週間は長すぎる。仕事だったとしても休みの間に考えておけ!だろうし。

個人的には問題作成側の意図がどこにあるか?という点がすごく気になるところですね。



> 不具合3.ポインタメンバ ptr は Base/Derivative コンストラクタ内で throw されても delete されない
> 3はとっちゃん様 blog とかでも解説あるとおりかな・・・

あの記事はほぼ受け売りです。なので、様とか恥ずかしいです><


> # こうやって振り返ると C++ って罠だらけな言語なのね
>
ですねー。だからこそ派生していろいろな言語が作られてるんだろうな。。。と思いますよ。

引用返信 編集キー/
■62878 / inTopicNo.6)  Re[4]: C++のコードの問題点
□投稿者/ PATIO (133回)-(2011/11/07(Mon) 17:37:03)
No62873 (とっちゃん さん) に返信
> 個人的には問題作成側の意図がどこにあるか?という点がすごく気になるところですね。

私も同意見です。
問題作成側の意図がわからないと何を回答者に期待しているのかがわからないので
なんと答えていいかも良くわかりません。
実際の話、演習問題の類は何かの説明の後、それを理解してもらう為に
出している物だと思うので実際にレクチャを受けている人には自明の内容でも
掲示板を見ている人間にはさっぱり分かりませんから。


>># こうやって振り返ると C++ って罠だらけな言語なのね
>>
> ですねー。だからこそ派生していろいろな言語が作られてるんだろうな。。。と思いますよ。

C言語も使い方次第でハマリ所満載な訳ですが、
C++言語にいたってはクラスと派生の関係で更にめんどくさい事に。
ちゃんと理解して使う分には便利な面もあるんですけれど、
ちゃんと理解するのが結構骨ですからねぇ。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -