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/<代码>也可能取决于用法。
  • 上面的代码只回答了您的即时问题,还有其他重要的事情需要考虑。您仍然需要遵循,因为您的结构有一个具有动态内存分配的指针成员
在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);

想想看——假设你在多个文件中包含了你的头。你真的想每次都做一个“MalCube()”吗?C++中,你缺少构造函数声明,以及复制构造函数和析构函数的声明和定义。没有这一点,答案就被打破了(会引起问题,比如内存泄漏)@DavidRodríguez dribeas:没错。更新为指向execellent答案,该答案解释得更详细。