复制包含联合的结构的构造函数
copy constructor for struct containing a union
考虑代码
struct S
{
S(){...}
union
{
int* pi;
double* pd;
}
// additional member functions etc
};
假设我们也有 pi
和 pd
的二传手 ,也就是说,根据选择联合的哪个成员来分配内存。
您将如何为S
编写复制构造函数?你怎么知道工会的哪个成员是"活跃的"?一种方法是在"激活"其中一个成员时设置一个额外的标志,还有其他方法吗?
你怎么知道工会的哪个成员是"活跃的"?
你不能,除非你存储一个标志来告诉你它被分配的方式。通常将这样的"选择器"标志存储在封闭类中,例如:
struct S
{
S(){...}
union
{
int* pi;
double* pd;
}
enum {
UseIntPtr,
UseDoublePtr
} unionSelector;
// additional member functions etc
};
设置pi
时,您可以将unionSelector
设置为 UseIntPtr
,或者在设置 pd
时设置为 UseDoublePtr
。然后,您将有一个标志可以在复制构造函数、赋值运算符等中使用。
如果联合是 POD(纯旧数据),那么您可以使用 memcpy
.效果很好。
在您的情况下,您必须给工会起一个名称,以便您可以sizeof myunion
。
memcpy(&this->myunion, &other.myunion, sizeof myunion)
相关文章:
- 在 c++ 中将变量作为结构构造函数中的引用传递
- 嵌套的模板结构构造函数实现
- 其他结构中的结构构造函数
- CPP/C 中的常量用法和结构构造函数中的澄清
- 聚合结构构造函数
- 结构构造函数调用不明确
- 关于结构构造函数和析构函数行为-C++
- 带有指针的C++结构:构造函数和析构函数
- 结构构造函数导致堆栈溢出的问题
- C++结构构造函数和函数冲突
- 嵌套结构构造函数和并集的问题
- C++结构构造函数
- 调用结构构造函数后初始化的值是什么
- 在结构构造函数中使用"this"关键字编译错误?-C++
- 这可能吗?在 C# 中调用托管 c++ 结构构造函数
- C++ - 结构构造函数,尝试取消指向结构的指针时出现重定义错误
- C++结构构造函数错误
- 结构构造函数语法
- 结构构造函数错误,为什么使用默认构造函数会调用错误
- Qt 将 QString 传递给结构构造函数不起作用