R.M*_*.M. 10 c++ copy-constructor assignment-operator
我发现自己做的一件常见的事情是制作"几乎默认"的复制构造函数和赋值运算符.也就是说,我发现自己处于编译器提供的复制和赋值运算符适用于大多数数据成员的情况,但是有一个特定的数据成员需要以不同的方式处理.这意味着我必须显式创建一个复制构造函数/赋值运算符,包括显式列出具有简单复制语义的所有数据成员.对于存在大量数据成员的类,或者稍后添加成员变量但未添加到复制构造函数/赋值运算符的类时,这会很烦人.
有没有办法告诉C++编译器显式声明的复制构造函数/赋值运算符应该像隐式运算符一样工作,除了之后运行的一些额外代码?(并且这样的语法与C++ 98兼容,还是需要C++ 11或C++ 14支持?)
Maa*_*ink 10
如果你可以像Igor Tandetnik建议的那样在适当的RAII包装中隔离特定的处理:那就去做吧.
如果您仍需要复制构造函数和/或赋值运算符中的特定处理(例如在容器或日志中注册对象创建/赋值),则可以将可以构造/赋值的默认副本的数据成员分组到一个单独的类中您用作基类或数据成员,您将其作为复合处理,因此:
struct x_base {
int a,b,c,d;
std::string name;
};
struct x : x_base {
x(const x& other)
: x_base(other)
{
descr = "copied ";
descr += name;
descr += " at ";
descr += CurrentTimeAsString();
std::cout << descr << "\n";
}
void operator = (const x& other)
{
x_base::operator =(other);
descr = "assigned ";
descr += name;
descr += " at ";
descr += CurrentTimeAsString();
std::cout << descr << "\n";
}
std::string descr;
};
Run Code Online (Sandbox Code Playgroud)
稍后添加不需要特定处理的数据成员时,只需将它们添加到x_base即可.
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |