【发布时间】:2018-06-14 15:25:22
【问题描述】:
我遇到了一个大型 pod 结构,我想在其中添加一个 std::vector 成员。
struct LargePodStruct {
float x,y,z;
int *arr;
int sz;
... // dozens of primitive types
std::vector<int> the_new_vector;
};
为了给这个结构添加一个vector,我需要用new替换这个结构的所有calloc()实例化。
另外,我需要将每个现有成员实例化为零。 但是,添加一个将每个成员实例化为零的默认构造函数是一项平凡的任务。以后也很容易忘记实例化一个新成员。
LargePodStruct::LargePodStruct()
x(), y(), z(), arr(), sz(), ... // +dozens of instantiations
{}
有没有更简单的方法来实例化这个结构的原始成员?
是否还有一种很好且优雅的方法来对工会成员进行零实例化?
.
struct LargePodStruct {
float x,y,z;
int *arr;
int sz;
...
union {
int i;
void *ptr;
} u;
std::vector<int> the_new_vector;
};
【问题讨论】:
-
你可以试试
memset()! -
考虑直接在类定义中为所有成员添加默认成员初始化器,例如
int * arr = nullptr;和int sz = 0;。 -
从 C++11 开始,您可以在声明中直接初始化它们,例如:
int sz = 0; -
@GrimFandango 我不熟悉它,但它被描述为here。
-
@kiner_shah,(+1) 你的提议是 c++98 的唯一选择。
标签: c++ c++98 construction