在通用结构中使用赋值运算符而不是复制c'tor,被认为是错误的编码?或者它没关系,因为可能人们普遍认为,如果某种数据类型有特殊的c'tor,那么应该有一个合适的赋值运算符吗?
例如,如果我正在制作我自己的通用链表,请使用 模板 和DATA数据; 每个节点内的字段。所以问题是如果在我的列表代码的某个地方,我可以在两个DATA变量之间使用赋值运算符。
答案 0 :(得分:0)
在泛型中使用赋值运算符而不是复制c'tor 结构,被认为是错误的编码?
问题是笼统的,所以我的回答也是笼统的。
没有。使用赋值运算符本身并不错。像任何东西一样,它可能被误用或实现不正确,但作为一个概念,使用赋值运算符没有任何问题。这就是他们的目的。
答案 1 :(得分:0)
例如,如果我使用模板和DATA数据制作我自己的通用链表;每个节点内的字段。所以问题是如果在我的列表代码的某个地方,我可以在两个DATA变量之间使用赋值运算符。
在此示例中,不使用两者,请使用swap
。这是更快和异常安全的。
using std::swap;
swap(old, new);
如果使用赋值运算符,首先复制一个副本,然后调用析构函数。
如果使用复制构造函数,则会调用两个析构函数和一个复制构造函数。
如果使用swap,则调用一个swap
和一个析构函数。 swap
通常很便宜。
答案 2 :(得分:0)
赋值运算符和复制构造函数以及两个不同的东西,但具有相似的功能。至于它被认为是一种不好的做法的问题,通常这样做并不是一个坏主意。它的优点是可以在程序中的任何时间从任何地方调用它。复制构造函数通常仅在对象初始化时调用。
分配操作员有时会导致非常危险的情况。程序员负责检查某些条件,例如自我分配。在这里,如果是链接列表,您还必须销毁该对象在新分配之前保留的先前列表。
我希望这是你想要的。