LoginSignup
4
4

More than 5 years have passed since last update.

C++erがD言語の勉強のメモ書きをしていく。

Last updated at Posted at 2014-06-05

どこかにメモしておきたかったのでここに書き溜める。

クラス関係

クラスオブジェクトは参照によってのみインスタンス化される

D言語は以下のようにオブジェクトを生成する。

MyClass mine = new MyClass();

これはC++の以下のコードに相当するイメージ。

MyClass* mine = new MyClass();

関数にオブジェクトを渡す、関数からオブジェクトを返すときはすべて参照でやりとりしていると考える。 struct などのクラス以外の型は実体が基本になる。構文上は区別がつかないので意識すること。

オブジェクトの private メンバは同一モジュールの非メンバ関数からアクセスできる

C++で言うところの friend に近い。必然的にファイルの構成まで意識する必要がある。

module my_package.my_module;

class MyClass
{
  /* ... */
  private int my_data;
  package int another_data;
}

void func(MyClass mine)
{
  writeln(mine.my_data);
}

オブジェクトの package メンバは同一パッケージのモジュールからアクセスできる。

これも friend に相当。クラスに関係する関数が多くなった時に便利。

module my_package.my_other_module;
import my_package.my_module;

void func(MyClass mine)
{
  writeln(mine.another_data);
}

メモリ関係

  • 基本的にメモリの解放はガベッジコレクタに任せる
  • RAII や scoped_lockのようなことをしたい場合はローカル変数を scope で宣言する。
  • C言語のライブラリを使うなどの場合 scope(exit) スコープガード文を使用する。
  • GC.malloc で確保したメモリはガベッジコレクタで解放される。
  • - クラスのデストラクタで free するとガベッジコレクタによりすでに解放されている場合があるため落ちることがある。必要ない。

dub

プロジェクトの構築と依存関係の解決はdubを使って行うのが主流らしい。

コンパイラの選択は --compiler オプションで行う

dub.json から設定できるようにして欲しい・・・。

まだわかっていないこと

  • コンパイル済みライブラリの template を使用した場合にどのようにコンパイルされるのか
  • 同様にコンパイル済みのライブラリの関数はアプリケーションコードからインライン化されるのか、されるとしてどのようにコンパイルされるのか
  • dub でOSごとに設定を変えることができるかどうか

まだ書いていないこと

  • メモリ関係
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4