gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:28:28 36 4
gpt4 key购买 nike

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

例如,如果对象 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/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com