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

New - C++

Восстановить пароль Регистрация
 
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
20.07.2013, 20:40     New #1
Как можно перегрузить оператор new только для типа char?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
20.07.2013, 20:45     New #2
bgm123, никак.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
20.07.2013, 20:46     New #3
так он же перегружен. или о чем Вы?
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
20.07.2013, 20:49  [ТС]     New #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];
        }
    }
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
20.07.2013, 20:52     New #5
bgm123, operator new не обладает иформацией о типе, для которого выделяет память. Максимум, можно перегрузить с другой сигнатурой, но тогда и использование new будет по другому выглядеть
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
20.07.2013, 20:53     New #6
bgm123, так Вам надо перегрузить оператор new или сделать что-то свое?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
20.07.2013, 21:06     New #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)
Yandex
Объявления
20.07.2013, 21:06     New
Ответ Создать тему
Опции темы

Текущее время: 18:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru