1

今日、C ++のクラスのデフォルトのコンストラクターについて読んでいて、SortedArrayクラスの次のコードがあるとしましょう。

class SortedArray
{

private:
    struct arrayCell
    {
        int pageID;                
        int totalNeighbors;   
    };
};

このクラスのオブジェクトを指すポインターの配列を割り当ててから、デフォルトのコンストラクターを使用してポインターを初期化します。何が起こるか?構造体用のメモリは保存されますか?そして、それがintの初期化対象である場合はどうなりますか?ありがとう。

4

3 に答える 3

2

古い答え:その要素用にメモリが作成されていることは間違いありません。コンパイルして実行すると、そのメモリにアクセスするときにセグメンテーション違反は発生しません。intsはデフォルト値の0に設定されます。

デフォルトのコンストラクター情報はここにあります。

編集:上記の答えは正しくありません。構造体が定義されているため、コードは整数要素のメモリを提供しませんが、手動で作成しない限り、構造体を使用するオブジェクトは作成されません。手動で作成すると、これらの整数のメモリが作成されます。

作成された整数の値について:

それらは、作成される前にメモリにあったものを単に含むという意味のあるものに初期化されることはありません。

于 2012-11-02T02:05:27.250 に答える
2

あなたがタイプのポインタについて話しているならSortedArray*、いいえ。

SortedArrayプライベートネストタイプの空のクラスです。

ネストされたタイプのインスタンスを割り当てる場合SortedArray::arrayCell、整数はデフォルトで初期化されます(値は指定されていません)。

于 2012-11-02T03:19:55.890 に答える
0

配列で初期化する各オブジェクトに、intをデフォルト値(0)に設定して、メモリを割り当てると確信しています。

于 2012-11-02T02:03:28.357 に答える