Перегрузка размещения Новый оператор с инициализацией члена данных и разницей с нормальным новым операторомC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Перегрузка размещения Новый оператор с инициализацией члена данных и разницей с нормальным новым оператором

Сообщение Anonymous »

Я пишу перегруженную версию размещения новой и хочу инициализировать целочисленный элемент данных внутри функции. < /p>

#include
#include
struct A {
int i;
void* operator new(size_t, void *p, int x) { return p; }
};
int main() {
A* pa = new(malloc(sizeof(A)), 10) A;
pa->~A();
delete pa;
}
< /code>

Я хотел бы знать, как это сделать в приведенном выше коде.
также, < /p>

class A {
public:
static int* p;
void* operator new(size_t sz, unsigned int val) {
p = (int*) malloc(sizeof(val));
*p = val;
}
};
int* A::p;
int main() {
A *p= new (10) A(); // calls overloaded new with initialization and not placement new
cout p)

В приведенном выше коде синтаксис выглядит похоже на новое размещение, однако он вызывает перегруженную новую версию. Так как компилятор различает между перегруженным размещением новым и новым оператором? Это основано на типе аргумента (т.е.) void*? Что, если есть элемент данных, который является void*, и он должен быть инициализирован с помощью void* аргумента? Как компилятор справляется с этим?

Подробнее здесь: https://stackoverflow.com/questions/220 ... -differenc
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»