Effetive C++条項4

1725 ワード

オブジェクトが使用される前に初期化されていることを確認
プログラムで初期化されていないデータ・メンバーが使用されている場合、プログラムに予想外のエラー結果が発生することがわかります.このセクションでは、初期化方法について説明します.
まず
classの場合、その初期化はメンバー初期化カラムを使用して行われ、コンストラクション関数のいわゆる「初期化」は割り当てられます.以下に,前者は初期化後付与,後者は直接初期化である.
class P{
public:
 P(int x0, int y0)
    {
        x=x0;
        y=y0;
    }
private:
    int x,y;
}
class P{
public:
 P(int x0, int y0):x(x0),y(y0)
    {
        x=x0;
        y=y0;
    }
private:
    int x,y;
}

に続く
non-local staiticオブジェクトの場合、オブジェクトが初期化されているかどうかは不明ですので、使用するたびに直接再定義して初期化します.
class FileSystem{
public:
……
std::size_t numDisks()const;
……
};
FileSystem& tfs()
{
    static FileSystem fs;
    return fs;
}

class Directory{
public:
    Directory( params )
    {
        ……
        std::size_t disks=tfs.numDisks();
        ……
    }
};

Directory tempDir()
{
    static Directory td;
    return td;
}