所以,我只是想知道我们怎么能完全擦除或重置一个结构才能重复使用?
我刚打了这个,你走了:
typedef struct PART_STRUCT
{
unsigned int Id;
std::string Label;
} Part;
typedef struct OBJECT_STRUCT
{
std::vector< unsigned char > DBA;
std::vector< Part > Parts;
unsigned int Id;
} Object;
Object Engine;
// Initialize all members of Engine
// Do whatever with Engine
// ...
// Erase/Reset Engine value
答案 0 :(得分:28)
您只需为其分配一个构造的临时文件:
Part my_struct;
my_struct = Part(); // reset
C ++ 11:
my_struct = {}; // reset
答案 1 :(得分:6)
如果由于某种原因我一心想要不断保持同一个对象,我只想写一个reset
方法,将所有值重置为原来的值。
类似的东西:
struct Test {
int a;
int b;
Test(): a(0), b(100) {}
void reset() {
a = 0;
b = 100;
}
};
int main() {
Test test;
//do stuff with test
test.reset(); //reset test
}
答案 2 :(得分:-1)
良好的做法是避免使用这种类型的构造(对于两种不同的语义含义使用相同的变量,同时重置它)。当您(或其他人)修改您的代码并忘记为两种不同用途共享变量时,它将不可避免地在以后创建一个奇怪的错误。
唯一的理由是节省一些内存空间,但是:
但如果你真的想要重置,你必须编写一个方法来完成它。在C ++中没有内置方式,因为它实际上需要再次调用destructor
然后调用constructor
。
解决方案my_struct = Part()
仅在您的destructor
微不足道的情况下才有效。假设您已在std::vector
中分配了指针,在清空delete
之前,您必须正确vector
每个指针。这就是为什么它不能自动完成的原因:结构的清理可能需要特殊处理而不是遗忘。