Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
42 / 42 / 27
Регистрация: 29.01.2013
Сообщений: 277
1

New

20.07.2013, 20:40. Просмотров 363. Ответов 6
Метки нет (Все метки)

Как можно перегрузить оператор new только для типа char?
0
What a waste!
1576 / 1277 / 171
Регистрация: 21.04.2012
Сообщений: 2,677
20.07.2013, 20:45 2
bgm123, никак.
0
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
20.07.2013, 20:46 3
так он же перегружен. или о чем Вы?
0
42 / 42 / 27
Регистрация: 29.01.2013
Сообщений: 277
20.07.2013, 20:49  [ТС] 4
Вообщем что надо. В коде, который ниже оператор new должен перевыделять память с помощью функции realloc. Если в предыдущей области нет места. Вот какие основные вопросы:
1.Как передать указатель на предыдущую область памяти в new
2.Как оградить от такого оператора new остальные типы данных, например int.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int size = 2;
    char ch;
    int count = 0;
        
    char *str = new char[size];
    
    while(cin >> ch){
        str[count] = ch;
        count++;
        if(count == size){
            size += size;
            str = new char[size];
        }
    }
0
What a waste!
1576 / 1277 / 171
Регистрация: 21.04.2012
Сообщений: 2,677
20.07.2013, 20:52 5
bgm123, operator new не обладает иформацией о типе, для которого выделяет память. Максимум, можно перегрузить с другой сигнатурой, но тогда и использование new будет по другому выглядеть
0
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
20.07.2013, 20:53 6
bgm123, так Вам надо перегрузить оператор new или сделать что-то свое?
0
What a waste!
1576 / 1277 / 171
Регистрация: 21.04.2012
Сообщений: 2,677
20.07.2013, 21:06 7
Цитата Сообщение от bgm123 Посмотреть сообщение
1.Как передать указатель на предыдущую область памяти в new
доп. аргемент, как то так:
C++
1
2
3
4
5
void * operator new[](std::size_t size, void * memory) { /* ... */ }
 
// ...
 
str = new (str) char[size];
Добавлено через 10 минут
Хотя нет, с такой сигнатурой нельзя будет перегрузить, с такой можно:
C++
1
void * operator new[](std::size_t size, char * memory)
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.