Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вручную вызвать конструктор? ...без использования new 
:(
    Опции темы
Ignat
Дата 9.12.2005, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 3
Всего: 73



Цитата(A @ 9.12.2005, 18:23)
Так что malloc используется, и вовсю!

А кто говорил, что он не используется?
Цитата(A @ 9.12.2005, 18:23)
вызывается конструктор, но НЕ ИЗ NEW !!!

Подожди, либо я туплю... Но судя по коду именно из new:
Код

cmp         dword ptr [ebp-104h],0    ; _callnewh(size) == 0
je          WinMain+4Ch (425CECh) ; _STD _Nomemory(); //Exeption

далее никакого ret.


--------------------
Теперь при чем :P
PM   Вверх
Void
Дата 9.12.2005, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(A @ 9.12.2005, 19:22)
Вопрос остается открытым - как вручную запустить конструктор?

Столько флейма, и до сих пор не ответили? Ну вы даете, товарищи smile Placement new вас выручит:
Код

#include <new>

void *buff = your_advanced_allocation_function(sizeof(A));
A *a = new(buff) A;



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
A.V.N.
Дата 12.12.2005, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Цитата(Void @ 9.12.2005, 16:45)
Столько флейма, и до сих пор не ответили? Ну вы даете, товарищи smile


Да, меня это тоже удивило smile

Цитата(Void @ 9.12.2005, 16:45)

Placement new вас выручит:

#include <new>

void *buff = your_advanced_allocation_function(sizeof(A));
A *a = new(buff) A;


Я нашел более универсальный вариант:
Код

template <class T>
class Constructor
{
    T var;
  public:
    void *operator new (size_t size)  { return alloc(size); }
    void *operator new[] (size_t size)  { return alloc(size); }
    void operator delete (void *ptr) { return free (ptr); }
    void operator delete[] (void *ptr) { return free (ptr); }
};

class Foo { /* ... */ };

Foo *f = new Constructor<Foo>;



Работает как для встроенных, так и для пользовательских типов данных.

Это сообщение отредактировал(а) A.V.N. - 12.12.2005, 12:57
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.