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

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

Восстановить пароль Регистрация
 
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
31.07.2014, 23:54     Созданный объект Array<char> удаляется, как только метод convert завершается #1
Есть простенькая оболочка над массивом 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 завершается
Посмотрите здесь:

C++ E2034 Cannot convert 'char' to 'char *'
C++ cannot convert parameter 1 from 'char' to 'char []'
C++ Как возвратить указатель на объект, созданный в методе?
C++ Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь(
C++ ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11813 / 6792 / 768
Регистрация: 27.09.2012
Сообщений: 16,855
Записей в блоге: 2
Завершенные тесты: 1
01.08.2014, 00:10     Созданный объект Array<char> удаляется, как только метод convert завершается #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от QGuest Посмотреть сообщение
Но почему?
Потому что это автоматическая переменная.

Сделайте корректный конструктор копий и оператор присваивания
Jewbacabra
1787 / 1502 / 538
Регистрация: 24.04.2014
Сообщений: 4,215
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
Модератор
Эксперт С++
 Аватар для Croessmah
11813 / 6792 / 768
Регистрация: 27.09.2012
Сообщений: 16,855
Записей в блоге: 2
Завершенные тесты: 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!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
01.08.2014, 03:34     Созданный объект Array<char> удаляется, как только метод convert завершается #7
Цитата Сообщение от QGuest Посмотреть сообщение
возвращаться должен новый объект или *this?
*this
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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 завершается
Еще ссылки по теме:

C++ Поворот массива на 90 градусов (cannot convert form char to char*)
array char* to char* (значения массива указателей в один указатель) C++
C++ Как правильно завершить char array (Null terminated)

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

Или воспользуйтесь поиском по форуму:
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 завершается
Ответ Создать тему
Опции темы

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