c++ - 这是合法的吗? C++

标签 c++ dynamic-allocation

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

删除[] p.n​​ame; 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*。如果 name 是一个 std::string,你可以只写 p.name = a.name; 它会分配内存并复制自动数据。

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

关于c++ - 这是合法的吗? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43172425/

相关文章:

c++ - 奇怪的行为 printf( ) 每行调用 10-13 次

c++ - 如何在 C++ 中使用 new 分配内存?

c++ - 释放二维数组中的内存

c++ - 指针数组的动态分配及其替代方案

c++ - 追求更好的位标志枚举

c++ - Callgrind:分析我的代码的特定部分

c++ - 如何让 vim 包装三斜杠注释?

c++ - 动态分配的字符串数组,然后更改它的值?

c - 将字典内容写入文件时出现段错误

c++ - VS2017 15.6.1 更新后未解析的外部 "int __cdecl invoke_main(void)"