0
#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;
4

3 回答 3

1

显示的代码缺少析构函数,这将导致内存泄漏。

添加适当的析构函数后,生成的类将完全符合 Rule-Of-Three。因此,不会有任何与内存相关的问题。

于 2016-11-28T03:26:29.743 回答
1

保持std::string按值。除了作为字符串抽象之外,它还是一个资源管理类,所以就这样使用它。如果您这样做,您的班级将符合 0/3/5 规则,而无需您付出任何额外的努力。

于 2016-11-28T07:18:56.717 回答
0

std::string运行过程中内存用完时,会抛出异常,所以进程不会破坏内存。

于 2016-11-28T07:14:50.810 回答