【发布时间】:2013-04-07 02:52:53
【问题描述】:
我有一个名为Solution 的类定义如下。我只包含了相关代码,并且我没有编写了自定义复制或赋值运算符。
class Solution {
public:
Solution() {
stream.setNewSeed(seedShift+static_cast<long>(12345));
++seedShift;
}
RandomNumberStream stream;
private:
static long seedShift = 0;
};
这里的重点是我希望Solution 的每个新实例都有不同的随机数流。这行得通。
然而,问题是在某些地方我从std::vector<Solution> 复制Solution 的实例,稍微修改它,然后将副本推送到相同的std::vector<Solution>。发生这种情况时,我有两个具有相同随机数种子的 Solution 实例,灾难随之而来。
如何使stream.setNewSeed(seedShift+static_cast<long>(12345)); 和++seedShift; 语句在被推送到向量上的复制Solution 实例中运行?
【问题讨论】:
-
你说你没有写过这些。为什么不呢?
-
因为我是新手,不确定是否需要这些...尽管我怀疑它们可能是。如果需要,我不知道怎么写
-
您需要实现复制构造函数,操作与默认构造函数相同。
-
但是,当我实现复制构造函数时,我是否需要编写代码来复制所有其他类成员(上面未显示)?仅供参考:我没有任何指针作为成员,所以这里不应该需要深拷贝(或其他任何名称)。
-
这取决于你拥有什么样的成员,但你可以编写一个通用函数来执行通用操作并从两者中调用它。
标签: c++ vector copy-constructor assignment-operator