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++ 中,通常会使用new而不是malloc,但由于您的指针是 type voidmalloc根据使用情况也可能没问题。
  • 上面的代码只是回答了你的直接问题,还有其他重要的事情需要考虑。你仍然需要遵循三法则,因为你有一个指针成员,可以为你的结构动态分配内存。

在 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 回答