Introduction 前回の記事で日本語だったのですが、社内で英文でも良いじゃない?と言われたので、言葉にあまえて英語で失礼します。 Last time , we started to use our basic framework to execute independant tasks on multiple cores at the same time. We did preliminary test to see how much performance we were getting with push/popping tasks around. Now that we have a good measure of the cost of the system under load, we are going to look at some APIs and how we c
後置インクリメントにはひと目で遅くなりそうな処理が見て取れますね。 前置インクリメントがインクリメント処理後、単純に自身の参照を返すのに対し、後置インクリメントではインクリメント前に一時オブジェクトの生成、そしてインクリメント後にはその前に生成した一時オブジェクトを値で返しています。 前置と後置では、単純にオブジェクトをコピーして返す分、普通に考えたら後置の方が遅いよね。というのが従来の認識でした。 「C++ Coding Standards -101のルール、ガイドライン、ベストプラクティス」の中でも、特に後置インクリメントの必然性が無い時は迷わず前置インクリメントを使うことが推奨されてきました。 元の値を必要としないときは前置形式の演算子を使おう __C++ Coding Standards (p50) 新たな主張 「ゲームエンジン・アーキテクチャ第二版」の中の一節を紹介します。 しか
この記事はC++ Advent Calendar 2012の15日目にエントリしています。 内容はC++11「ムーブセマンティクス」の入門記事となっています。 もくじ ムーブセマンティクス再考 シンタックス vs. セマンティクス コピー vs. ムーブ ムーブのもつ2つの意味 C++11のムーブセマンティクス対応 auto_ptrからunique_ptrへ auto_ptrの暗い過去 unique_ptrへの移行 std::moveの役割 ムーブセマンティクスを使おう C++11標準ライブラリとムーブ ムーブ"後"の中身は? ムーブを利用して関数を書く (本文のみ約9500字) まえがき To move or not to move: that is the question. ― Bjarne Stroustrup, 2010(改)*1 プログラミング言語C++の新しい国際標準規格*2
C++にはガーベジコレクタが言語的には存在しないので、動的に確保したオブジェクトのメモリの管理はプログラマが責任を持って管理しなければ、メモリリーク・リソースリークなどの問題を生じてしまいます。 今時のプログラマはこうした問題を引き起こすリスクを減らす為に、記述ミスの起こりやすい生のポインタを使い自力でnewとdeleteを記述する事を避けて、安全なスマートポインタ、即ちオブジェクトの寿命により自動的にメモリ解放を行う便利なポインタを利用するべきです。 しかし、スマートポインタと言っても種類が幾つかあり、落とし穴も存在するのでどういった状況でどれを利用するのが良いのかを考察してみます。 Dynamic memory managementを見てみても C++11から随分増えていますね http://en.cppreference.com/w/cpp/memory std::auto_ptr
本サイトは、Boost C++ Libraries日本語コミュニティのWebサイトです。 Boost C++ Librariesに関する最新情報、日本語ドキュメント、Boost.勉強会の情報などを提供していきます。 このWebサイトは、以下のGitHubリポジトリにて作成を行っています。 boostjp/site : WebサイトのMarkdownソース boostjp/image : Webサイトで使用する画像リソース HTMLデータのダウンロード boostjp.github.io-master.zip ローカルで閲覧できるHTMLを用意しています。 関連サイト C++リファレンスサイト cpprefjp 運営者 boostjpは、以下のコアメンバが運営を行っています: Akira Takahashi Usagi Ito melpon Kohsuke Yuasa Akiko Yaman
C++が他のオブジェクト指向言語と比べて難しいのは、やはりメモリ管理をプログラマが自分でしなければいけない点だと思います。よくよく注意しないと、削除し忘れたり、同じオブジェクトを2度削除してしまうというエラーが発生します。このノートでは、オブジェクトを「値オブジェクト」と「参照オブジェクト」というカテゴリに分け、詳細設計の段階で注意すべき点を整理しておきたいと思います。 0. はじめに 私自身今までいくつかのプログラミング言語を使ってきましたが、C++ が他のオブジェクト指向言語と比べて難しいのは、やはりメモリ管理をプログラマが自分でしなければいけない点だと思います。例えば、 Person* person = new Person(); と生成したオブジェクトは、使い終わったら次のように削除しなければなりません。 delete person; 生成してすぐ削除するなら簡単なのですが、実際に
結論 VisualC++コンパイラの仕様上、CPPには実装できない。 但し、明示的実体化を行うことで、実装可能。 例 TemplateClass.h:テンプレートのヘッダ template <class T> class TemplateClass { // コンストラクタ TemplateClass(T* t); int getValue(); }; TemplateClass.cpp:テンプレートの実装 #include "TemplateClass.h" // コンストラクタ TemplateClass<T>::TemplateClass(T* t) { this->t = t; } int TemplateClass<T>::getValue() { t->getValue(); } main.cpp #include "TemplateClass.h" // テンプレート実体化の
ロベールのC++入門講座 09-03 ロベール本ではテンプレートの実装はヘッダに書かなければならないとさらりと書かれていましたが、何故そうしないといけないのかが本を読むだけでは今一良くわからなかったので色々調べてみたところ、理由がわかりました。 まず宣言と定義をファイルを分けて実装した場合、どういった状態になるかを見てみましょう。 // -- csample.h -- #ifndef __CSAMPLE_H__ #define __CSAMPLE_H__ template<class T> void template_swap(T& a, T&b); #endif // -- csample.cpp -- #include "csample.h" template<class T> void template_swap(T& a, T&b) { T t = a; a = b; b = t;
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く