きままにブログ

プログラミングを主とした私のメモ帳です。寂しいのでコメントください笑

仮想デストラクタ

C++

ポインタをdeleteするときに、基底クラスのポインタをdeleteしようとすると非virtualなデストラクタの場合、継承先クラスのデストラクタが実行されないというよくあるお話です。別にデストラクタに限らず、一般的なvirtual関数でもおなじ話ですが、特に明示…

やっぱりガベージコレクタについて考える

C++

アロケータの自作 やはりmallocやnewをしたあとfreeするのは時間がかかるようなので、もしも数多くのfreeが必要なデータを扱う場合はなるべくfreeしないで再利用する方がいいようです。そうなるとメモリープールの実装が必要となります。この際アライメント…

mallocとfree

C++

会社説明会にいってきました。学校がとてもつまらないく思えるほど早く働きたいと思いました。 本題 1万回int型をmallocしてfreeして、その時間を計測してみました。Core i3, Windows7(64bit)でVC++2013/32bitReleaseで実験しています。 int main() { LARGE_…

引数のデフォルト値

C++

template <class T> struct C { C(int x = 1); // ここに書く }; template <class T> C<T>::C(int x) { std::cout << x << std::endl; } 定義の方ではなく、宣言の方に書く(知らなかった)。</t></class></class>

C4346 : 依存名は型名ではありません

C++

template <class T> struct B { struct A; A* func(); }; template <class T> struct B<T>::A { }; template <class T> B<T>::A* B<T>::func() { // B<T>::A*は型名ではありません! return new A(); } Tが不明なため、B::A*もどういったものか分からないためエラーとなる。これが型であることを明示</t></t></t></class></t></class></class>…

全手動ガベージコレクタを作った

C++

マークからスイープまで全部自分で指定しないと動いてくれないガベージコレクタを作った。しかも1つのメモリ管理に付き1つの型しかつかえない。要はメモリアロケータなのだが、 static MemoryManager<int> mm; int main() { int c = 0; while(1) { auto& item = m</int>…

Luaでオブジェクト指向表記

Lua

Lua速習で述べたとおり、数々のテーブルへのシンタックスシュガーは、オブジェ言うと指向型言語のような表記をするために定義されています。これらを使ってオブジェクト指向のように書いてみます。 クラス表現 安易に考えられるのが、クラスとしてテーブルを…

速習Lua

Lua

Luaとは Luaとは、軽量スクリプト言語です。主にC/C++等に組み込んで使われます。組み込んだ方のアプリケーションをホストといいます。 Luaの特徴 Hello, world. print("Hello, world."); Luaは標準関数としてprintを持っており、標準出力に出力します。引数…

クラス(構造体)のゼロクリア

単に0に初期化したい場合 = { 0 }で初期化されることが規格で認められている。というのも初期化されていないメンバについては、0での初期化が再帰的に適応されるためである。 = { 1 }とした場合は最初のメンバだけ1で初期化され、他は0で初期化される。

例外安全

C++

RAII RAIIは、リソースはコンストラクタだけで確保され、デストラクタで解放されるクラス構成等を指す。つまり、コンストラクタ以外ではnewなど使わなければ良い。メンバを生ポインタとして持つと、複数の例外等によってコンストラクタから抜け出すときに解…

ドラッグできる子供ウィンドウ

ドラッグして子供ウィンドウを親ウィンドウの内部で動かせる。右クリックで削除できる。複数追加できる。まだ自動的に動くような処理は書いていないがひとまずWin32APIの勉強になった。途中、どうしても分からないバグがあったが、これはC言語何でも質問掲示…

コンテナクラスとコンテナの関係

C++

要件 あるコンテナクラスCCがあって、要素のクラスCをリンクリストとして可変子保持する。各クラスCは適当なタイミングで自身を削除したい。どうすべきか? 案 クラスCに親の参照を持たせ、自身の削除が必要になったところで親に自信を削除するように通知する…

左辺値と右辺値

C++

右辺値と左辺値 C++では式の型(T, const T, volatile T, T&, T&&)以外にもうひとつ式の値を分類する用語がある。いままで左辺値、右辺値といっていたような類いである。 int x; x = 3; いままではxが=の左側にあるからxは左辺値、3は右側にあるから右辺値と…

C4239TypeからType&への変換です

C++

問題 #include <iostream> #include <cassert> using namespace std; class C { public: C() { cout << "create" << endl; } /*C(C&) { cout << "copy" << endl; }*/ }; C func() { C c; return c; } int main() { C c = func(); cin.get(); return 0; } においてコメントアウト</cassert></iostream>…

音楽を聴く

twitterが重い twitterに繋がらないので「twitter重すぎ」とtweetしようとしてしまったが、そもそもtweetできないじゃないか……。 音楽のジャンル シャッフル再生で適当に聴くと、今までは好きな音楽(アニソン・電波・アイドルソングなどキャッチーなメロディ…

借りてきたCDとか

EXILE JAPAN B'z the BEST!! ARASHI 5x10 All the BEST! 1999-2009 湘南乃風~Single BEST!~ ゆず Going 2001-2005 いきものばかり~メンバーズBESTセレクション~ 平井堅 JAPANESE SINGER UVERworld THE ONE SUPER☆GiRLS Celebration L'Arc~en~Ciel TWEN…

wikipediaのスタイルのルール 役立ちそうなことをまとめた。 雑多な内容を箇条書きした節を避ける 読みづらくなるため、内容を織り交ぜた上で一連の流れを持つ文章に構成し直す。 すぐに古くなる表現は使わない 記事が古くなったとき、読者はいつの話なのか…

例外の後始末

C++

次のようにmain関数の中でlock-unlock処理の中に何らかの関数funcがあったとして、funcが例外を投げる可能性があるとする。例外の如何に関わらず、unlockが実行されるにはどうしたら良いだろうか? スコープを抜けたらデストラクタが呼び出されることを利用 v…

サブクラスから、派生元クラスの外部に公開したくないメンバを呼び出したい

C++

事案 class C { protected: int member; // 公開したくないメンバー }; class D : public C { public: void func(const C& c) { cout << c.member << endl; // Cのmemberを使いたい } }; これはコンパイルエラーとなる。このように引数に渡した派生元クラス…

reverseの実装例

C++

2つのイテレータを与えて、その間の要素を全て逆順に並び替えるreverse関数は、 template <class T> void reverse(T begin, T end) { for(; begin != end && begin != --end; begin++) { iter_swap(begin, end); } } のように実装できます。iter_swapは2つのイテレー</class>…

ブログ?

はてなダイアリー ずいぶん前から〈はてなダイアリー〉から〈はてなブログ〉へサービスが移ろうとしていた記憶がある。現に、トップページには〈はてなダイアリー〉がない。何年も書いていなかったので特に問題は感じていないが、このたびメモのためにブログ…