对象的动态内存和赋值运算符重载
Dynamic Memory and assignment operator overloading of objects
如果我使用带有动态内存的赋值运算符重载,我应该检查指针内是否已经有东西吗?
例如,如果对象 A 在构造函数中具有名为"name"的数组的动态内存分配。
存储在对象 A 中的是名称"John",其内存在构造函数中分配
name = new char[strlen(userinput)+1];
如果我想通过赋值运算符重载将对象 B 复制到对象 A 中,我必须写
if(name != null){delete [] name;}
name = new char[strlen(src.name)+1];
首先清除阵列还是在重新分配内存之前不必删除名称?
"先清除阵列,还是在重新分配内存之前不必删除名称?"
这样,您必须始终注意内存管理和取消/分配。你必须遵守副本结构,作业(参见什么是三法则?
if(name != nullptr){delete [] name;} // ^^^^^^^ The correct term is nullptr
您必须自己管理nullptr
值。 delete
/delete []
不会自动分配nullptr
值,而是给您留下一个悬而未决的指针。
与其自己管理动态分配的内存,更好的解决方案是使用适当的容器类,如 std::vector<char>
或 std::string
:
class A {
std::string name;
};
相关文章:
- 使用赋值运算符重载从类中返回jobject
- 赋值运算符重载和自赋值
- C++ 指针赋值运算符重载(不仅是对象赋值,还有指针赋值)
- 赋值运算符重载在通过指针访问时不调用
- "return *this"赋值运算符重载
- 赋值运算符重载 c++ 的返回值
- 在对类对象的赋值进行链接时获取垃圾值,使用按值返回类对象的赋值运算符重载
- 在c++中的赋值运算符重载方法中删除旧的动态分配内存
- 复合赋值运算符重载
- 对象的动态内存和赋值运算符重载
- c++中的赋值运算符重载
- c++赋值运算符重载
- 如何通过赋值运算符重载将一个列表复制到另一个列表上?C++
- 赋值运算符重载和无效内存
- 赋值运算符重载 -- 错误 C2440:'==':无法从 'A<T> *' 转换为 'A<T> *const '
- 为什么内存泄漏只发生在赋值运算符重载的情况下,而不是在复制构造函数中,以及复制和交换习惯用法如何解决它
- 内存泄漏,使赋值运算符重载、新建、删除和C++
- C++中的效率和赋值运算符重载
- 赋值运算符重载/检索功能
- 为什么在赋值运算符重载中返回引用