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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
#1

Созданный объект Array<char> удаляется, как только метод convert завершается - C++

31.07.2014, 23:54. Просмотров 302. Ответов 8
Метки нет (Все метки)

Есть простенькая оболочка над массивом Array<T>:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
template<typename T>
class Array {
private:
    T* data;
public:
    const unsigned int length;
 
    Array(unsigned int length) : length(length) {
        data = new T[length];
    }
 
    T& operator[](int index) {
        if (index < 0 || index >= length) {
            throw out_of_range("Array index out of range.");
        }
        return data[index];
    }
 
    operator T*() {
        return data;
    }
 
    ~Array() {
        delete[] data;
    }
};
Есть метод:
C++
1
2
3
4
5
6
7
Array<char> convert(const string& data) {
    Array<char> result(data.length());
    for (int i = 0; i < data.length(); i++) {
        result[i] = data[i];
    }
    return result;
}
Непонятное поведение происходит в таком коде:
C++
1
2
3
4
char* arr = convert("string");
for (int i = 0; i < 6; i++) {
    cout << arr[i] << " ";
}
Выяснил, что созданный объект Array<char> удаляется, как только метод convert завершается. Но почему? Он же должен быть передан как возвращаемый результат. Почему же он удаляется?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2014, 23:54     Созданный объект Array<char> удаляется, как только метод convert завершается
Посмотрите здесь:

Поворот массива на 90 градусов (cannot convert form char to char*) - C++
Пытаюсь повернуть массив на 90 градусов. Понимаю что проблема в преобразовании данных, но не знаю как исправить( Может кто подсказать...

Как возвратить указатель на объект, созданный в методе? - C++
A* B::ReturnPtrA(){ A a; a.Method1(a.Method2()); //... return &amp;a; } Говорит, что нельзя возвращать указатель...

Как правильно вернуть объект созданный в функции? - C++
Допустим у нас есть функция, которая динамически создает объект и должна его вернуть. К примеру, возьмем динамическое создание массива. ...

Корректно ли удаляется динамически созданный массив? - C++
Собственно, интересует нечто подобное (очень утрированно): int* i1 = new int ; ... заполняется i1 ... int* i2 = i1; i1 = new int...

array char* to char* (значения массива указателей в один указатель) - C++
Как сложить(или вывести в формате char*) все значения массива указателей(char *) воедино, то есть сложить строки и назначить результату...

convert char to hex - C++
Здравствуйте. Подскажите пожалуйста как преобразовать строку в hex? То есть имеем функцию convert(char param) { return hex; }

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
01.08.2014, 00:10     Созданный объект Array<char> удаляется, как только метод convert завершается #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от QGuest Посмотреть сообщение
Но почему?
Потому что это автоматическая переменная.

Сделайте корректный конструктор копий и оператор присваивания
Jewbacabra
Эксперт PHP
2177 / 1841 / 684
Регистрация: 24.04.2014
Сообщений: 5,350
01.08.2014, 00:11     Созданный объект Array<char> удаляется, как только метод convert завершается #3
QGuest, не хватает конструктора копий и оператора присваивания
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
01.08.2014, 00:12  [ТС]     Созданный объект Array<char> удаляется, как только метод convert завершается #4
Цитата Сообщение от Croessmah Посмотреть сообщение
оператор присваивания
какой оператор присваивания?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
01.08.2014, 00:14     Созданный объект Array<char> удаляется, как только метод convert завершается #5
C++
1
2
3
Array & operator=(const Array & rhv ) {
   //бла-бла-бла
}
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
01.08.2014, 00:25  [ТС]     Созданный объект Array<char> удаляется, как только метод convert завершается #6
Цитата Сообщение от Croessmah Посмотреть сообщение
Array & operator=(const Array & rhv ) {
* *//бла-бла-бла
}
А возвращаться должен новый объект или *this?
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
01.08.2014, 03:34     Созданный объект Array<char> удаляется, как только метод convert завершается #7
Цитата Сообщение от QGuest Посмотреть сообщение
возвращаться должен новый объект или *this?
*this
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.08.2014, 07:33     Созданный объект Array<char> удаляется, как только метод convert завершается #8
QGuest, когда возвращаете ссылку, имейте в виду, что объект, на который она ссылается должен остаться существовать и после выхода из функции. Т.о. автоматические переменные, созданные внутри функции, совершенно для этого не подходят, т.к. они уничтожаются при выходе из функции.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2014, 19:37     Созданный объект Array<char> удаляется, как только метод convert завершается
Еще ссылки по теме:

Cannot convert 'char *' to 'int' - C++
Ребят, как перевести 'char *' to 'int'. int n; n= atoi(argv); не катит. Что посоветуете?

Convert string to char - C++
В структуре надо зарандомить имена. Пробую таким способом: создал массив имен string arrayName = { &quot;Vasya&quot;, &quot;Petya&quot;, &quot;Andrey&quot;,...

Cannot convert 'UnicodeString' to 'const char *' - C++
При написании программы столкнулся с проблемой. На этих строчках: char sFInName=STR_FILE_IN_NAME, sFOutName=STR_FILE_OUT_NAME,...

Cannot convert 'UnicodeString' to 'const char *' - C++
делаю локальную сеть, столкнулся с проблемой: addr.sin_addr.s_addr=inet_addr(&quot;192.168.0.3&quot;); как сделать чтобы ip мог задать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
01.08.2014, 19:37  [ТС]     Созданный объект Array<char> удаляется, как только метод convert завершается #9
Цитата Сообщение от Tulosba Посмотреть сообщение
Т.о. автоматические переменные, созданные внутри функции, совершенно для этого не подходят, т.к. они уничтожаются при выходе из функции.
То как правильно возвращать объекты созданные в функции?
Yandex
Объявления
01.08.2014, 19:37     Созданный объект Array<char> удаляется, как только метод convert завершается
Ответ Создать тему
Опции темы

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