Cpp クラス コピーコンストラクタのソースを表示
新しいページはコチラ
移動:
案内
,
検索
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> <tr> <td style="width:1px;"></td> <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ クラス コピーコンストラクタ</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td> </tr> </table> ※このページでは[[C PlusPlus|C++]]にのみ存在する機能として、記事タイトルが<nowiki>C++ クラス コピーコンストラクタ</nowiki>になっています。<br /> <br /> == '''クラス コピーコンストラクタ''' == その名前のとおりの機能ですが、すんなり理解することはやや難しい仕組みです。コピーコンストラクタは、コピーするためのコンストラクタで引数部にクラス自身のconst参照型をうけとるものです。 クラスの変数を代入演算子をつかって以下のように表現しようとしたとすると、 <syntaxhighlight lang="cpp"> CTest CTest1_obj; CTest CTest2_obj = CTest1_obj; </syntaxhighlight> という代入は、コピーコンストラクタという仕組みがない場合には、通常期待する代入とは違った動作になってしまいます。CTest2_objの値はCTest1_objと確かに同じ値を保持することになりますが、単純にCTest1_objと同じアドレスを保持することになるだけで、CTest1_objの保持している値と連動してしまいます。動的に生成されたクラス変数ならば、CTest1_objが消えれば、CTest2_objは実体の存在しないアドレスを保持していることになり、CTest2_objの保持するアドレス値をnull_ptrにするといったような細かい調整をしない限り、CTest2_objのデストラクタと呼ばれるクラス変数消滅時に必ず動作する処理で実体を消す処理がうまくいかずプログラムは異常終了します。 なんだかややこしい表現をして、おそろしい結末になるようなことを言いましたが、コピーコンストラクタをクラスに含めれば、そのような問題を解決できるということになります。 コピーコンストラクタは以下のように定義します。 <syntaxhighlight lang="cpp" line start="1"> #pragma once class CCopyConstructor001 { private: int xxx; public: //★コピーコンストラクタ CCopyConstructor001(const CCopyConstructor001& CconstrefCopyConstructor001_Para1); CCopyConstructor001(void); ~CCopyConstructor001(void); }; </syntaxhighlight> <syntaxhighlight lang="cpp" line start="1"> #include "stdafx.h" #include "CopyConstructor001.h" //★コピーコンストラクタ CCopyConstructor001::CCopyConstructor001(const CCopyConstructor001& CconstrefCopyConstructor001_Para1) { xxx = CconstrefCopyConstructor001_Para1.xxx; //★主に、メンバ変数の初期化処理を行う動作をさせる } CCopyConstructor001::CCopyConstructor001(void) { } CConstructor001::~CConstructor001(void) { } </syntaxhighlight>
テンプレート:記事名の制約
(
ソースを閲覧
)
Cpp クラス コピーコンストラクタ
に戻る。
個人用ツール
3.133.13.2
このIPアドレスのトーク
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ