c++ - 对象的动态内存和赋值运算符重载

标签 c++ object memory dynamic assignment-operator

如果我对动态内存使用赋值运算符重载,我应该检查指针内部是否已经有东西吗?

例如,如果对象 A 在构造函数中为名为“name”的数组分配动态内存。

对象A中存储的是名字“John”,内存是通过构造函数分配的

name = new char[strlen(userinput)+1];

如果我想通过赋值运算符重载将对象 B 复制到对象 A 中,我是否必须这样写

if(name != null){delete [] name;}
name = new char[strlen(src.name)+1];

要先清除数组还是在重新分配内存之前不必删除名称?

最佳答案

"To first clear the array out or do I not have to delete name before reallocating memory?"

这样,您就必须始终注意内存管理和取消/分配。您必须遵守复制构造和分配(参见 What is the Rule of Three? )。

if(name != nullptr){delete [] name;}
        // ^^^^^^^ The correct term is nullptr

您必须管理 nullptr重视自己。 delete/delete []不要分配 nullptr自动值,但给你留下一个 dangling pointer .


与其自己管理动态分配的内存,更好的解决方案是使用适当的容器类,如 std::vector<char>std::string :

class A {
    std::string name;
};

关于c++ - 对象的动态内存和赋值运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29724183/

相关文章:

C++ 之后从运行 switch 到 if 语句

PHP - 作为对象的关联数组

python - 为什么从一个 ndarray 复制到另一个 ndarray 内存消耗?

c++ - openCV和c++中给定命名方法中的多个图像读取

c++ - 如何求偶数位置上的元素之和?

C++ While循环检查最新的输入int

javascript - 如何检查对象中键的值并在 if 语句中使用它? JavaScript

javascript - 将 javascript 对象键值推送到 javascript 对象键数组

python - 找出还有谁在引用,大数据

mysql - 是什么决定了 Ubuntu 上使用 Rails 和 MySQL 的内存使用