Я пишу перегруженную версию размещения новой и хочу инициализировать целочисленный элемент данных внутри функции. < /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
Перегрузка размещения Новый оператор с инициализацией члена данных и разницей с нормальным новым оператором ⇐ C++
Программы на C++. Форум разработчиков
1756438168
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* аргумента? Как компилятор справляется с этим?
Подробнее здесь: [url]https://stackoverflow.com/questions/22062254/overloading-placement-new-operator-with-data-member-initialization-and-differenc[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия