「クラスのコンストラクタで別クラスのポインタを渡し、コピーして使う」という使い方は、オブジェクト指向プログラミングとして正しいのでしょうか。
また、これが正しい場合コピーしたクラスのポインタはdeleteする必要はあるのでしょうか。
C++ クラスのコンストラクタで別クラスのポインタを渡して使う
Re: C++ クラスのコンストラクタで別クラスのポインタを渡して使う
すみませんでした。deleteの問題は自己解決しました。
ポインタのコピーはアドレスをコピーしているだけなので、
deleteすると他の場所で使えなくなるのでdeleteしてはいけませんね。
ポインタのコピーはアドレスをコピーしているだけなので、
deleteすると他の場所で使えなくなるのでdeleteしてはいけませんね。
Re: C++ クラスのコンストラクタで別クラスのポインタを渡して使う
「クラスのコンストラクタで別クラスのポインタを渡し、コピーして使う」こと自体は問題はありません。雨ガエル さんが書きました:「クラスのコンストラクタで別クラスのポインタを渡し、コピーして使う」という使い方は、オブジェクト指向プログラミングとして正しいのでしょうか。
たとえばJavaのBufferedReaderクラスのコンストラクタにはReader型のオブジェクトを渡します(Javaの場合は参照ですがポインタと同じようなものです)
オブジェクト指向な設計として適切かどうかは、クラスの詳細が分からないと議論できません。
Re: C++ クラスのコンストラクタで別クラスのポインタを渡して使う
適切かどうかは場合によります。雨ガエル さんが書きました:「クラスのコンストラクタで別クラスのポインタを渡し、コピーして使う」という使い方は、オブジェクト指向プログラミングとして正しいのでしょうか。
メモリ管理をポインタを持っているクラスに任せるという設計であれば、deleteする必要があります。雨ガエル さんが書きました: また、これが正しい場合コピーしたクラスのポインタはdeleteする必要はあるのでしょうか。
つまり、AクラスのインスタンスがBのポインタの独占的な所有権を持っている場合、ということになります。
ただし、Aのデストラクタでdeleteするとインスタンスをコピーしたときにコピー先のインスタンスがdeleteされたポインタを持ってしまうので、コピーコンストラクタでBのインスタンスを複製するか、参照カウント方式などで管理する必要があります。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: C++ クラスのコンストラクタで別クラスのポインタを渡して使う
シングルトンよりメンテナンス性が高く・可読性の高い良い使い方であるなら問題ないと思います。
実装でどうしようもない部分はあるので、理想のオブジェクト指向じゃないにしても後々困らなかればよいかなって感じで私は作っています。
※ オブジェクト指向を極めたわけでもなんでもないんですけどね。
実装でどうしようもない部分はあるので、理想のオブジェクト指向じゃないにしても後々困らなかればよいかなって感じで私は作っています。
※ オブジェクト指向を極めたわけでもなんでもないんですけどね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++ クラスのコンストラクタで別クラスのポインタを渡して使う
beatleさん、h2so5さん、softya(ソフト屋)さん、ISLeさん、回答ありがとうございました。
クラスのポインタをコピーして使うのは問題ないのですね。
deleteすると思い通りの動作をしないことがわかりました。
ありがとうございました。解決しました。
クラスのポインタをコピーして使うのは問題ないのですね。
deleteすると思い通りの動作をしないことがわかりました。
ありがとうございました。解決しました。