Привет, Я тренировался с размещением нового и использовал его для создания объектов. Рассмотрим следующий пример:разница между (void *) и &
class PNewTesting
{
private:
string words;
public:
PNewTesting(const string & w = "Placement new testing");
};
PNewTesting::PNewTesting(const string & w)
{
words = w;
cout << words << " constructed" << endl;
}
int main()
{
char * buffer = new char[BUF];
PNewTesting *p1,*p2;
p1 = new (buffer)PNewTesting;
p2 = new PNewTesting("Placing object in heap");
cout << "Memory addresses: " << endl;
cout << "buffer: " << (void *)buffer << endl;
cout << "object placed in buffer: " << p1 << endl;
cout << "object in heap: " << p2 << endl;
}
Деталь сбивает с толку меня, что когда я пишу cout << "buffer: " << &buffer << endl;
, это дало бы мне другой адрес при написании cout << "buffer: " << (void *)buffer << endl;
Вопрос, в чем разница между &buffer
и (void*)buffer
, и почему каждый из них дает мне другой адрес.
Это совершенно не связано с размещением новых, кстати. –
Ах, извините, просто начинающий C++, так и не понял. –
Это прекрасно.Но теперь вы знаете :) –