- 締切済み
C++言語 クラスを引数に
class CVect{ public: show(); ・ ・ }; void CTest::show(CVect s){ s.show(); } CVectというクラスがあって それを関数の引数で上記のような感じでしばらく使ってた のですがその使い方(void CTest::show(CVect s){ /*←この部分*/)はおかしいと指摘を受けました。これについて分かる方いませんか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- alna_sag
- ベストアンサー率50% (4/8)
回答番号:No.1の補足です。 『show関数を使うだけなら CVect::show() const;にして CTest::show(const CVect &s)としたほうがより安全です。』 の部分はCVect::show関数内でCVectのメンバ変数を変更しているとき はconstではないので使えません。 showというくらいだから勝手にconstでいいものだと思ってました。
- alna_sag
- ベストアンサー率50% (4/8)
CVectの中身がわからないのでなんともいえませんが、 コンストラクタやデストラクタでクラスのメンバのポインタに 動的メモリを割り当てていたりすると(newやdeleteを 使っていたりすると)かなり危険ですよ。 またクラスが関数に引き渡されるとき, そのクラス自身ではなく,クラスのコピーが引き渡されるので、 メンバ変数なども全部コピーされてしまい、無駄なオーバーヘッドが かかります。 CTest::show(CVect &s)として参照を渡すか、 CTest::show(CVect *s)としてポインタを渡す方が 一般的です。 show関数を使うだけなら CVect::show() const;にして CTest::show(const CVect &s)としたほうがより安全です。