Я пытаюсь понять оператора нового и размещения нового.
Это мой код:
#include<iostream>
using namespace std;
class simpleClass
{
int objID;
public:
simpleClass(int ID) // constructor
{
objID = ID;
cout << "Constructing object with ID: " << objID << endl;
}
void printID()
{
cout << "Object ID: " << objID << endl;
}
~simpleClass()
{
cout << "Destructing object with ID: " << objID << endl;
}
};
int main(int argc, char** argv)
{
void *ptrToMem = operator new(sizeof(simpleClass)*3);
simpleClass *simpleClassPtr_1 = new (ptrToMem)simpleClass(1);
simpleClass *simpleClassPtr_2 = new ((simpleClass*)ptrToMem + sizeof(simpleClass))simpleClass(2);
simpleClass *simpleClassPtr_3 = new ((simpleClass*)ptrToMem + sizeof(simpleClass)*2)simpleClass(3);
simpleClassPtr_1->printID();
simpleClassPtr_2->printID();
simpleClassPtr_3->printID();
simpleClassPtr_1->~simpleClass();
simpleClassPtr_2->~simpleClass();
simpleClassPtr_3->~simpleClass();
operator delete(ptrToMem);
return 0;
}
Я просто пытаюсь выделить память для 3 объектов, а затем вызываю новые для них.
Кажется, что все работает нормально, пока оператор delete, где он дает мне исключение (в VS2013).
Что я делаю не так?
Разрешено ли вызывать оператор удаления при использовании нового размещения?