查询在头文件中声明大小

时间:2012-10-26 03:45:30

标签: c++ header-files

我有一个包含指向固定大小内存的指针的结构。

说,

// 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;
};

1 个答案:

答案 0 :(得分:1)

你不能使用第一种语法,它会给你一个编译错误 至于正确的方法,答案取决于您使用的是C还是C ++。

在C ++中:

你应该只声明头文件中的结构成员 您在C ++源文件的 Member Initialization List 初始化

标题文件:

// 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,但由于您的指针属于void类型,malloc也可能正常,具体取决于使用情况
  • 上面的代码只是回答您的即时问题,还有其他重要事项需要考虑。您仍然需要关注 Rule of Three ,因为您有一个带动态内存分配的指针成员为你的结构。

在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);