gpt4 book ai didi

c++ - 如何判断一个c++类是否可复制

转载 作者:行者123 更新时间:2023-11-30 04:17:37 27 4
gpt4 key购买 nike

我有兴趣加深对如何避免编写在复制时导致问题的 C++ 类的理解。

特别是,我编写了一个名为 Policy 的类我打算复制。我没有定义非默认析构函数、复制构造函数或复制赋值运算符。我重载的唯一运算符如下:

friend bool operator== (const Policy& p1, const Policy& p2) {
for(int i=0; i<p1.x.size(); i++) {
if(p1.x[i] != p2.x[i])
return false;
}
return true;
}

该类的成员是标准数据类型,例如 int , double , bool , std::string , std::vector<double> , std::vector<int> , std::vector<string> ,或者我定义的几个小的(因此并不过分复杂的)类之一,这些类绝对可以毫无问题地复制。现在,有一个成员 Policy那是 NRRan 的一个实例类,这是我构建的类,作为不可复制的第三方数据类型的包装器; NRRan如下:

class NRRan {
public:
double doub() { return stream->doub(); }

int intInterval(const int& LB, const int& UB) { return LB+int64()%(UB-LB+1); }

void setNewSeed(const long& seed) {
delete stream;
stream = new Ranq1(seed);
}

NRRan() { stream = new Ranq1(12345); }

~NRRan() { delete stream; }

NRRan(const NRRan& nrran) {
stream = new Ranq1(12345);
*stream = *(nrran.stream);
}

NRRan& operator= (const NRRan& nrran) {
if(this == &nrran)
return *this;
delete stream;
stream = new Ranq1(12345);
*stream = *(nrran.stream);
return *this;
}

private:
Ranq1* stream; // underlying C-struct
Ullong int64() { return stream->int64(); }
};

但整点NRRan类是制作Ranq1可复制的。所以,鉴于 Policy正如我所描述的那样(抱歉,我无法发布大部分代码),在我复制 Policy 时是否有任何可能导致问题的东西? ?我的期望是复制将创建一个完美的值(value)拷贝。

更一般的问我问题的方式如下:一般来说,在复制类时哪些类型的事情可能会导致问题?除了“三规则”之外还有什么吗? (或“五规则”)在使类可复制时要注意什么?

最佳答案

好吧,这个问题具有误导性..

一个线性答案可以是——使用std::is_copy_constructible找出一个类是否可以被复制。

关于c++ - 如何判断一个c++类是否可复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994395/

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