我有一个包含指向固定大小内存的指针的结构。
说,
// 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;
};
答案 0 :(得分:1)
你不能使用第一种语法,它会给你一个编译错误 至于正确的方法,答案取决于您使用的是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))
{}
注意:
new
而不是malloc
,但由于您的指针属于void
类型,malloc
也可能正常,具体取决于使用情况在C中,没有成员初始化列表,因此在创建结构对象后必须初始化成员。
标题文件:
// Structure of a page
struct Page {
// Number of slots
unsigned short numSlots;
void *data;
};
源文件:
struct Page obj;
obj.data = malloc(PF_PAGE_SIZE);