newでインスタンス化

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たか

newでインスタンス化

#1

投稿記事 by たか » 16年前

クラスをnewでインスタンス化するメリットはありますか?

C++の入門書などを眺めていて、仮想関数を使うときはどんな場面だろうか。
とか、思っていて次に中々進めてないので質問しました。
回答よろしくお願いします。

環境:
Visual C++ Express Edition 2008
Windows Vista Home Basic

SCI

Re:newでインスタンス化

#2

投稿記事 by SCI » 16年前

クラスに限らず、「メモリを動的に確保する」ということはC/C++特有のメリットがあります。
例えば、普通に宣言(例えば自動記憶域期間)すると、スコープを抜けた時点で問答無用でなくなります。
また、宣言時に、インスタンス生成に必要な情報を揃えておく必要があります。
これに対して、動的確保を使う場合、生成・破棄のタイミングを自分で決めることができるので、処理の幅が広がります。
実行時まで生成に関する情報が定まらないインスタンスなどは、必然的にこの方法になるでしょうね(私はまだそのようなものを扱ってませんが)。

それから、これは仮想関数とも関係があるのですが、共通する基底クラスのポインタとしていろいろな派生クラスのポインタを保持することができます。
格納したポインタから仮想関数を呼ぶことで、派生クラスの(オーバーライドされた)メソッドを呼ぶことが出来ます。

たか

Re:newでインスタンス化

#3

投稿記事 by たか » 16年前

> クラスに限らず、「メモリを動的に確保する」ということはC/C++特有のメリットがあります。

「メモリを動的に確保する」ということはCで学習してメリットも充分理解していましたが、
クラスだから、C++だからということで違うものと認識していました。
クラスでもC++でも変わりませんね。そうですよね


> 共通する基底クラスのポインタとしていろいろな派生クラスのポインタを保持することができます。
> 格納したポインタから仮想関数を呼ぶことで、...

C++の入門書にも書いてありました。今、意味が理解できました。

回答有難うございました。

閉鎖

“C言語何でも質問掲示板” へ戻る