[解決済み] C++のWrapperクラスの意味は何ですか?
質問
ラッパークラスを理解するのに少し苦労しています。どなたか適切な例を示していただけると幸いです。
- C++のWrapperクラスとは何ですか、またどのような状況で作成するのですか?
- ところで、どんな使い道があるのですか?
ありがとうございます。
解決方法は?
ラッパークラスとは、あるリソースをラップするクラス、つまりリソースを管理するクラスを意味するデファクト・タームです。つまり、ラッパーを書くということは、次のようなことを意味します。
class int_ptr_wrapper
{
public:
int_ptr_wrapper(int value = 0) :
mInt(new int(value))
{}
// note! needs copy-constructor and copy-assignment operator!
~int_ptr_wrapper()
{
delete mInt;
}
private:
int* mInt;
};
へのポインタを管理("wraps")するクラスです。
int
. すべてのリソースは、クリーンさ(明示的なクリーンアップコードやノイズがない)と正確さ(デストラクタの実行が保証されている、クリーンアップを忘れることがない、例外があっても安全)のために、何らかの方法でラップされる必要があります。
このパターンはSBRM(Scoped-bound Resource Management)と呼ばれますが、より一般的な(しかし最も難解な)名前はRAII(Resource-Acquisition is Initialization)です。このアイデアは、リソースのクリーンアップをデストラクタにバインドすることで、上記の理由から、スコープが残りを処理します。
コピーコンストラクタとコピーアサインオペレータがないと言ったことに注意してください。これは ルール・オブ・スリー . (このルールを正しく実装する最も簡単な方法は、コピー&スワップというイディオムで、次のように説明します。 こちら .
時には、リソースのクリーンアップのためにラッパークラスを書くのは現実的ではありません。(あるいはトランザクションプログラミングの場合。) この解決策は スコープガード これは、クリーンアップを必要とする関数の内部にクリーンアップコードを記述する方法です。
より詳しい情報は、お気に入りの検索プロバイダー(つまりGoogle)で検索するか、"primary"のドキュメントにアクセスすると見つかるかもしれません。 こちら . なお、Boostでは ユーティリティ これは、良いイディオムにはたいていそうであるように、です。
関連
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】C++11のラムダ式って何?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン