0

固定サイズのメモリへのポインタを含む構造体があります。

言う、

// Structure of a page
struct Page {
public:
    // Number of slots
    unsigned short numSlots;
    void *data = malloc(PF_PAGE_SIZE);
};

この宣言をヘッダーファイルに入れたいと思います。また、パーツを明示的に配置する必要がありますか、それともポインタが指すメモリの量に関する詳細mallocのみを含む必要がありますか?void *data

要するに、宣言は上記のように見えるか、次のようになります。

// Structure of a page
struct Page {
public:
    // Number of slots
    unsigned short numSlots;
    void *data;
};
4

1 に答える 1

1

最初の構文は使用できません。コンパイラエラーが発生します。
正しいアプローチは、CとC++のどちらを使用しているかによって答えが異なります。

C ++の場合:

ヘッダーファイルで構造体メンバーのみを宣言する必要があります。これは、C++ソースファイルのメンバー初期化リストで初期
化し ます。

ヘッダーファイル:

// Structure of a page
struct Page {
public:
    // Number of slots
    unsigned short numSlots;
    void *data;
};

ソースファイル:

Page::Page():data(malloc(PF_PAGE_SIZE))
{}

ノート:

  • 生のポインターではなく、スマートポインターを使用することをお勧めします。
  • また、C ++では通常は使用newmallocますが、ポインタはタイプvoidmallocあるため、使用法によっては問題ない場合もあります。
  • 上記のコードは、あなたの直接のQに答えるだけです。考慮すべき他の重要なことがまだあります。構造体に動的メモリ割り当てを行うポインターメンバーがあるため、3つのルールに従う必要があります。

Cの場合:

Cには、メンバー初期化リストがないため、構造体のオブジェクトを作成した後でメンバーを初期化する必要があります。

ヘッダーファイル:

// Structure of a page
struct Page {
    // Number of slots
    unsigned short numSlots;
    void *data;
};

ソースファイル:

struct Page obj;
obj.data = malloc(PF_PAGE_SIZE);
于 2012-10-26T03:50:20.770 に答える