Форум программистов, компьютерный форум, киберфорум
Наши страницы

Как выделить память для класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Количество неодинаковых символов в строке http://www.cyberforum.ru/cpp-beginners/thread127978.html
Что-т не получается написать прогу...:\ #include <stdio.h> #include <conio.h> #include <string.h> int main () { int kolvo=0; int j; char buff;
C++ Ошибка компилятора при выводе string Stock::Stock(const char * co, int n, double pr) { cout<<"Вызван конструктор для: "<< co << "!\n"; company = co; if(n < 0) { cout<<"Количество пакетов не может быть отрицательным; для "<<... http://www.cyberforum.ru/cpp-beginners/thread127964.html
C++ Код по си++, необходимо внести поправку
#include<stdio.h> #include<conio.h> #include<string.h> int Find_in_file(const char *filename, const char *str) { char s; FILE *file;
C++ Как исправить ошибки
#include "stdafx.h" #include <iostream> #include <conio.h> #include <stdio.h> #include <string.h> using namespace std; #define STRLEN 100
C++ Файлы http://www.cyberforum.ru/cpp-beginners/thread127951.html
"Дан файл, содержащий сведения о книгах. Структура записи : фамилия и инициалы автора, название, издательство и год издания. Каждая запись заканчивается символом перевода строки (\n). Записи не...
C++ Класс, реализующий стек Привет всем, Есть такая задача: Описать класс, реализующий стек. Написать программу, использующую этот класс для моделирования Т-образного сортировочного узла на железной дороге. Программа должна... подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1641 / 1013 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
11.05.2010, 20:23
Строго говоря, создание объекта разделяется на 3 этапа - выделение памяти, заполнение служебных полей, инициализация. Если хотим выделять память под сложные объекты самостоятельно, последние две операции всё равно придётся возложить на new, в данном случае - на конструкцию, известную как in-place new, который получает в качестве аргумента адрес памяти, выделенной под создаваемый объект.
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T> T* MyAlloc()
{
    return static_cast<T*>(malloc(sizeof(T));
}
 
void foo()
{
    MyType *object = MyAlloc<MyType>();  // Это мы выделяем память
    object = new(object) MyType();    // А это - заполнение vtable и вызов конструктора при помощи in-place new
    object->VirtualFunction();
    free(object);
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru