Я хочу определить свое собственное место размещения и удаление места (принимая дополнительные параметры), и я обнаружил, что могу правильно вызвать место размещения, в то время как я не смог получить доступ к удалению места размещения. Может ли кто-нибудь сказать мне, я неправильно определяю место размещения, или я вызываю его неправильно?C++ самоопределяемое место размещения new и размещение delete invoking
class A
{
public:
A(int a) : a(a){}
static void* operator new(std::size_t, int); // the placement new
static void operator delete(void*, int)throw(); // the corresponding placement delete
private:
int a;
};
void* A::operator new(std::size_t size, int n)
{
std::cout << "size: " << size << " " << "n: " << n << std::endl;
return ::operator new(size);
}
void A::operator delete(void* p, int n)throw()
{
std::cout << "n: " << n << std::endl;
::operator delete(p);
}
int main(int argc, char* argv[])
{
A* a = new(10) A(100);
std::cout << std::endl;
delete(4) a; // error???????????????????, but how?
return 0;
}
Возможный дубликат [Почему нет места удаления в C++?] (Http://stackoverflow.com/questions/5857240/why-there-is-no-placement-delete-expression-in-c) – Suma
Это не похоже на размещение нового, особенно на то, как вы указали свой указатель 'A *' (не уверен, что 10 - это правильная ячейка памяти: P). Взгляните сюда: http://www.parashift.com/c++-faq/placement-new.html – Xaqq
@Xaqq: * * * форма размещения новая, но не самая распространенная, которая проходит по адресу, где объект будет размещен. –