C++ 关于在头文件中声明大小的查询
我有一个包含指向固定大小内存指针的结构 说 我想把这个声明放在头文件中。我是否也应该明确地将C++ 关于在头文件中声明大小的查询,c++,header-files,C++,Header Files,我有一个包含指向固定大小内存指针的结构 说 我想把这个声明放在头文件中。我是否也应该明确地将malloc部分放在其中,或者它应该只包含void*data而不包含指针指向的内存量的详细信息 简言之,声明应如上所述或类似于以下内容: // Structure of a page struct Page { public: // Number of slots unsigned short numSlots; void *data; }; 不能使用第一个语法,它将导致编译器错
malloc
部分放在其中,或者它应该只包含void*data
而不包含指针指向的内存量的详细信息
简言之,声明应如上所述或类似于以下内容:
// Structure of a page
struct Page {
public:
// Number of slots
unsigned short numSlots;
void *data;
};
不能使用第一个语法,它将导致编译器错误。
至于正确的方法,答案取决于你是使用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))
{}
// Structure of a page
struct Page {
// Number of slots
unsigned short numSlots;
void *data;
};
struct Page obj;
obj.data = malloc(PF_PAGE_SIZE);
源文件:
// Structure of a page
struct Page {
public:
// Number of slots
unsigned short numSlots;
void *data;
};
Page::Page():data(malloc(PF_PAGE_SIZE))
{}
// Structure of a page
struct Page {
// Number of slots
unsigned short numSlots;
void *data;
};
struct Page obj;
obj.data = malloc(PF_PAGE_SIZE);
注:
- 最好使用智能指针,而不是原始指针李>
<> LI>在C++中,通常使用<代码>新< /代码>,而不是<代码> MalOC/<代码>,但由于指针是“代码>空格类型,
MALLC/<代码>也可能取决于用法。 - 上面的代码只回答了您的即时问题,还有其他重要的事情需要考虑。您仍然需要遵循,因为您的结构有一个具有动态内存分配的指针成员
// Structure of a page
struct Page {
public:
// Number of slots
unsigned short numSlots;
void *data;
};
Page::Page():data(malloc(PF_PAGE_SIZE))
{}
// Structure of a page
struct Page {
// Number of slots
unsigned short numSlots;
void *data;
};
struct Page obj;
obj.data = malloc(PF_PAGE_SIZE);
源文件:
// Structure of a page
struct Page {
public:
// Number of slots
unsigned short numSlots;
void *data;
};
Page::Page():data(malloc(PF_PAGE_SIZE))
{}
// Structure of a page
struct Page {
// Number of slots
unsigned short numSlots;
void *data;
};
struct Page obj;
obj.data = malloc(PF_PAGE_SIZE);
想想看——假设你在多个文件中包含了你的头。你真的想每次都做一个“MalCube()”吗?C++中,你缺少构造函数声明,以及复制构造函数和析构函数的声明和定义。没有这一点,答案就被打破了(会引起问题,比如内存泄漏)@DavidRodríguez dribeas:没错。更新为指向execellent答案,该答案解释得更详细。