gpt4 book ai didi

没有STL的C++动态数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:58 25 4
gpt4 key购买 nike

这是作业的一部分,但我只是要求澄清:

Load data from ATM.txt and store them in a dynamic array (ATM type, not STL) when the program starts up.

在没有 STL 的情况下,我该如何做动态数组?我想也许赋值意味着使用指针,“ATM 类型”让我失望了。

又提到了:

file accounts.txt into a dynamic array (Account type, not STL)

--不是作业的一部分

我一直不明白内存不安全操作的使用,例如从第一行提取文件中的项目数:

例如。

5
abc
def
hij
kml
mno

使用 STL( vector 或 C++11 数组)而不依赖文件中的数字会不会更聪明,因为它可能不准确导致缓冲区溢出等?

//编辑在包含数据成员的 Account.h 文件中定义一个类 Account:customerid、BSB号等

我假设帐户和 ATM 类型就是那些类。

最佳答案

动态数组的最基本形式是使用 new[] 创建,并使用 delete[] 销毁:

ATM * atms = new ATM[count];
// do stuff with the array
delete [] atms;

但是,这带来了使用数组的代码可能会抛出异常、从函数返回或以其他方式阻止 delete[] 发生的危险。如果发生这种情况,那么您将失去指向已分配内存的唯一指针,并且它将保持已分配但不可访问;这称为内存泄漏。出于这个原因,最好将数组包装在一个类中,使用:

  • 用于存储指向数组的指针的成员变量,以及(可选)它的大小
  • 分配数组的构造函数和/或函数
  • 删除数组的析构函数
  • (可选)调整数组大小的函数

删除对象析构函数中的分配使用RAII的原理以确保阵列在不再需要时被删除。

这又留下了一个危险:如果你复制这个数组对象,那么你最终会得到两个对象,它们都试图删除同一个数组,这是灾难性的。为防止这种情况,您需要考虑 Rule of Three .要么编写复制构造函数和复制赋值运算符来分配新数组并复制内容;或删除它们。 (如果你正在学习老式的 C++,那么你不能删除成员函数,所以你必须将它们声明为私有(private)而不是实现它们)。

Wouldn't it be smarter to use STL?

通常,是的。但是,如果您正在学习 C++,那么了解内存管理的工作原理以及如何让库为您处理它是个好主意。这可能是本练习的部分要点。

关于没有STL的C++动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077007/

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