这是合法的吗? C++

Is this legal ? C++

我有一个简单的问题.. 我可以在 operator+ 中为其他对象分配和取消分配内存吗

delete [] p.name; p.name = new char[strlen(a.name) + 1];

看看operator+

class PlDrustvo{
private:
   char *name;
public:
// Constructors and destructors are implemented.

PlDrustvo operator+(const PlDrustvo &a)
{
    PlDrustvo p(*this);
    if(///////){
        delete [] p.name;
        p.name = new char[strlen(a.name) + 1];
        strcpy(p.name, a.name);
    }

    return p;
}

};

是的,你可以做到。但是,最好使用 std::string 而不是 char*。如果 namestd::string,您可以只写 p.name = a.name;,它会自动分配内存并复制数据。

(std::string 也有一个 operator+ 进行字符串连接,因此您可以通过编写 p.name = name + a.name; 来连接两个名称 – 我猜这可能是您真正想要的你的 operator+ 功能。)