C++ dynamic array without STL

arrays, c++

Solution

The most basic form of dynamic array is one created using `new[]`, and destroyed using `delete[]`:

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

However, this brings the danger that the code using the array might throw an exception, return from the function, or otherwise prevent the `delete[]` from happening. If that happens, then you will lose the only pointer to the allocated memory, and it will remain allocated but inaccessible; this is known as a memory leak. For this reason, it's better to wrap the array in a class, with:

- member variables to store a pointer to the array, and (optionally) its size

- constructors and/or functions to allocate the array

- a destructor to delete the array

- (optionally) function(s) to resize the array

Deleting the allocation in an object's destructor uses the principle of RAII to ensure that the array is deleted once it is no longer needed.

This leaves one more danger: if you copy this array object, then you will end up with two objects that both try to delete the same array, which is disasterous. To prevent this, you'll need to consider the Rule of Three. Either write a copy constructor and copy-assignment operator to allocate a new array and copy the contents; or delete them. (If you're learning old-fashioned C++, then you can't delete member functions, so you'll have to declare them private and not implement them instead).

Wouldn't it be smarter to use STL?

Usually, yes. But if you're learning C++, it's a good idea to understand how memory management works, as well as how to get the library to handle it for you. That's probably part of the point of this exercise.

Problem

This is part of an assignment however I just asking for clarification: Load data from ATM.txt and store them in a dynamic array (ATM type, not STL) when the program starts up. How exactly do I do dynamic arrays without STL? I thought perhaps the assignment means using pointers, the "ATM Type" threw me off. It's mentioned again: file accounts.txt into a dynamic array (Account type, not STL) --not part of Assignment I've never understood the use of memory unsafe operations, eg pulling the number of items in a file from the first line: eg. ``` 5 abc def hij kml mno ``` Wouldn't it be smarter to use STL (vectors, or C++11 arrays) and not rely on the number in the file as it may not be accurate causing buffer overflows etc? //Edit Define a class Account in a file Account.h which contains the data members: customer id, BSB number, etc. I assume Account and ATM types are those classes.

Original source

Related problems