gpt4 book ai didi

c++ - 强制 C++ 类实例在复制或分配时更改成员值

转载 作者:行者123 更新时间:2023-11-28 03:19:01 27 4
gpt4 key购买 nike

我有一个名为 Solution 的类定义如下。我只包含了相关代码,并且我没有编写自定义复制或赋值运算符。

class Solution {

public:

Solution() {
stream.setNewSeed(seedShift+static_cast<long>(12345));
++seedShift;
}

RandomNumberStream stream;

private:

static long seedShift = 0;
};

这里的重点是我想要 Solution 的每个新实例有一个不同的随机数流。这行得通。

但是,问题是我在某些地方复制了 Solution 的实例。来自std::vector<Solution> ,稍微修改一下,然后将拷贝推送到相同的 std::vector<Solution> .发生这种情况时,我有两个 Solution 实例使用相同的随机数种子,灾难随之而来。

我怎样才能导致 stream.setNewSeed(seedShift+static_cast<long>(12345));++seedShift;要在复制的 Solution 中运行的语句被推到 vector 上的实例?

最佳答案

重载赋值运算符。注意 - 这也意味着当您从 vector 中读取值和/或复制 vector 本身时,随机数种子也会再次更改。

class Solution {

public:

Solution() {
stream.setNewSeed(seedShift+static_cast<long>(12345));
++seedShift;
}

Solution& operator=(Solution& other)
{
stream.setNewSeed(seedShift+static_cast<long>(12345));
++seedShift;


x = other.x;
y = other.y;
z = other.z;


return *this;
}

RandomNumberStream stream;

private:

static long seedShift = 0;
};

关于c++ - 强制 C++ 类实例在复制或分配时更改成员值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16007601/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com