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

Аналог realloc, знающий классы и вызывающий конструкторы/деструкторы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ одномерный массив http://www.cyberforum.ru/cpp-beginners/thread447680.html
Удалить все четные элементы
C++ Количество спиралей Решение задачи мне не нужно, требуется только логическое разъяснение хода действий. Спираль — это ломаная не нулевой длинны без самопересечений, вершины которой размещены в точках с целыми... http://www.cyberforum.ru/cpp-beginners/thread447658.html
C++ Считывание памяти
Чтото не понятное в голову пришло, вот хотелось бы узнать мнение експертов. Допустим у нас есть игра, в игрей карта, с отображением юнитов и тому подобное.. Можно ли какмто образом программно...
Написать программу, которая выводит минимальный элемент введенного с клавиатуры массива целых чисел C++
вот есть задача.... Написать профамму, которая выводит минимальный элемент введенного с клавиатуры массива целых чисел. Ниже приведен рекомендуемый вид экрана во время работы профаммы (данные,...
C++ Переставить буквы в слове http://www.cyberforum.ru/cpp-beginners/thread447645.html
Здравствуйте, прошу помочь с программой: C клавиатуры вводится слово с четным кол-вом букв, нужно поделить его пополам и поменять части этого слова местами. Пример: CyberForum -> ForumCyber ...
C++ Массив Помогите пожалуйста написать функцию: Подсчитать количество элементов с четными значениями. Массив задан размером n=10; подробнее

Показать сообщение отдельно
FinancialShark
2 / 2 / 0
Регистрация: 24.01.2014
Сообщений: 42
27.02.2014, 01:18
Цитата Сообщение от taras atavin Посмотреть сообщение
Можно ли сделать такой шаблон?

class A
{
};
class B
{
};
A *a;
B *b;
a=MyReAlloc(a, 1024); // Размер куска памяти по указателю a становится равным 1024-м объектам (а не байтам), для каждого создаваемого объекта вызывается A::A(), а при сокращении размера для каждого удаляемого объекта вызывается A::~A()
b=MyReAlloc(b, 512); // Размер куска памяти по указателю b становится равным 512-ти объектам (а не байтам), для каждого создаваемого объекта вызывается B::B(), а при сокращении размера для каждого удаляемого объекта вызывается B::~B()
Как это сделать?
очень просто!!!

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template<typename TYPE> void MyRealloc(void* Memory, int size)
{
int oldsize = _msize(Memory)/sizeof(TYPE);
if (size == oldsize) return;
if (size > oldsize)
{
Memory = (TYPE*)realloc(Memory, sizeof(TYPE)*size); // увеличит память
for (int i = 0; i < size-oldsize; i++)
    {
    new (oldsize+i) TYPE; // вызовет конструктор
    }
}
else
{
for (int i = oldsize-1; i >= size; i--)
    {
     delete (((TYPE*)(Memory))+i); // вызовет деструктор
    }
Memory = (TYPE*)realloc(Memory, sizeof(TYPE)*size); уменьшит память
}
/*вызов функции*/
MyRealloc<A>(a, 1024);
MyRealloc<B>(b, 512);
А вообще это извращение. для таких целей пишется отдельно класс.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru