#include<string>

class HasPtr {
public:
    HasPtr(const std::string &s = std::string()) :
        ps(new std::string(s)), i(0) {}
    HasPtr(const HasPtr &orig) :ps(new std::string(*orig.ps)), i(orig.i) {}
    HasPtr &operator=(const HasPtr &rhs) {
        *ps = *rhs.ps;
        i = rhs.i;
        return *this;
    }
private:
    std::string *ps;
    int i;
};


当我将其数据成员ps指向大字符串的HasPtr分配给另一个时,
我是否有可能导致内存损坏?例如:

HasPtr a;
HasPtr b(string("123456789...123456789"));
a=b;

最佳答案

按值保存std::string。除了是字符串抽象之外,它还是资源管理类,因此应按原样使用它。如果这样做,您的课程将符合0/3/5的规则,而无需您付出任何额外的努力。

关于c++ - 此拷贝分配操作安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40836721/

10-10 18:06