gpt4 book ai didi

c++ - 关于在头文件中声明大小的查询

转载 作者:行者123 更新时间:2023-11-28 07:54:22 25 4
gpt4 key购买 nike

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

说,

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

最佳答案

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

在 C++ 中:

您应该只在头文件中声明结构成员。
您在 Member Initialization List初始化 在 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 但由于您的指针属于 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);

关于c++ - 关于在头文件中声明大小的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13080441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com