Removing an array of structure pointer

I have the following structure:

struct Message {
    Agent *_agent;
    double _val;
};

and the following Ptrs array:

typedef Message* MessageP;
MessageP *_msgArr;
_msgArr = new MessageP[MAX_MESSAGES];

this is a method that inserts a message into an array:

void Timing::AddMessage(Agent * const agentPtr, double val) {

    MessageP msgPtr = new Message;
    assert(msgPtr != 0);

    //assign values:
    (*msgPtr)._agent = agentPtr;
    (*msgPtr)._val = val;

    //add to messages array:
    assert(_msgArr != 0 && _waitingMsgs<MAX_MESSAGES);
    _msgArr[_waitingMsgs] = msgPtr;
    _waitingMsgs++;

}

My question is about removing this array. I would like to remove the array and all selected structures. if i write:

delete [] _msgArr  

will also delete each allocated structure or free up only allocated memory for the array?

Is this the correct way over the entire array with a for loop and write

delete _msgArr[i]

and finally wite delete [] _msgArr to delete the selected array

thank!

+3
source share
4 answers

delete [] , _agent, . delete _msgArr[i]._agent, delete _msgArr[i] , Agent, Message.

-, , Agent s . , , _msgArr, _delete _msgArr[i], delete [] _msgarr;, - , .

Agent, .

-, Message , _agent. , , , private, .

-, Agent * , , Message .

-, , , .

C-, , std::vector<boost::shared_ptr<Message> >, Message boost::shared_ptr<Agent>, Agent * ( Agent s, Agent * ). : _msgArr , .

+2

, delete , delete[] .

+4

, . , .

#include <algorithm>
// might already exists in a boost header (i don't remember)
template <T>
void delete_func(T* e) {
    delete e;
}

// then, to delete your array :
std::for_each(_msgArr,_msgArr+MAX_MESSAGES, delete_func);
delete[] _msgArr;

. std::vector auto_ptr shared_ptr ( ). , auto_ptr . std::vector

0

, new delete, C. new ( ), ( std::vector), ,

, , std::vector< std::shared_ptr<Message> > .

0

Source: https://habr.com/ru/post/1764021/


All Articles