Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
1

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

31.07.2014, 23:54. Просмотров 886. Ответов 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 завершается. Но почему? Он же должен быть передан как возвращаемый результат. Почему же он удаляется?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2014, 23:54
Ответы с готовыми решениями:

После создания нескольких PictureBox-ов, удаляется только последний созданный
Такая проблема: Когда я создал несколько PictureBox'в, удаляется только последний созданный. Как...

Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь(
Всем доброго дня! У меня такая проблемка.... написал программу, но сначала она ругалась на Cannot...

Обойти ошибку: cannot convert argument 1 from 'char [100]' to 'char &'
Примерно выглядит так (я просто показал без лишнего текста) void menu(char &amp;name_user, char...

Warring: char * convert to const char * при трансляции
Не подскажет ли кто, как при трансляции на gcc убрать этот warring ? В info-gcc описана куча...

Ошибка Cannot convert a char value to money. The char value has incorrect syntax
В отчете (ниже) появляется ошибка Cannot convert a char value to money. The char value has...

8
Croessmah
++Ͻ
15950 / 9061 / 1745
Регистрация: 27.09.2012
Сообщений: 22,298
Записей в блоге: 2
Завершенные тесты: 2
01.08.2014, 00:10 2
Лучший ответ Сообщение было отмечено QGuest как решение

Решение

Цитата Сообщение от QGuest Посмотреть сообщение
Но почему?
Потому что это автоматическая переменная.

Сделайте корректный конструктор копий и оператор присваивания
1
Jewbacabra
Эксперт PHP
4036 / 3318 / 1429
Регистрация: 24.04.2014
Сообщений: 10,022
01.08.2014, 00:11 3
QGuest, не хватает конструктора копий и оператора присваивания
1
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
01.08.2014, 00:12  [ТС] 4
Цитата Сообщение от Croessmah Посмотреть сообщение
оператор присваивания
какой оператор присваивания?
0
01.08.2014, 00:12
Croessmah
++Ͻ
15950 / 9061 / 1745
Регистрация: 27.09.2012
Сообщений: 22,298
Записей в блоге: 2
Завершенные тесты: 2
01.08.2014, 00:14 5
C++
1
2
3
Array & operator=(const Array & rhv ) {
   //бла-бла-бла
}
1
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
01.08.2014, 00:25  [ТС] 6
Цитата Сообщение от Croessmah Посмотреть сообщение
Array & operator=(const Array & rhv ) {
* *//бла-бла-бла
}
А возвращаться должен новый объект или *this?
0
gray_fox
What a waste!
1561 / 1265 / 168
Регистрация: 21.04.2012
Сообщений: 2,649
Завершенные тесты: 3
01.08.2014, 03:34 7
Цитата Сообщение от QGuest Посмотреть сообщение
возвращаться должен новый объект или *this?
*this
1
Tulosba
:)
Эксперт С++
4752 / 3246 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
01.08.2014, 07:33 8
QGuest, когда возвращаете ссылку, имейте в виду, что объект, на который она ссылается должен остаться существовать и после выхода из функции. Т.о. автоматические переменные, созданные внутри функции, совершенно для этого не подходят, т.к. они уничтожаются при выходе из функции.
0
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
01.08.2014, 19:37  [ТС] 9
Цитата Сообщение от Tulosba Посмотреть сообщение
Т.о. автоматические переменные, созданные внутри функции, совершенно для этого не подходят, т.к. они уничтожаются при выходе из функции.
То как правильно возвращать объекты созданные в функции?
0
01.08.2014, 19:37
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2014, 19:37

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

выдает ошибку :[C++ Error] Unit1.cpp(30): E2034 Cannot convert 'char' to 'char *' не понимаю в чем дело
//Дано предложение. Найти наибольшее количество идущих подряд пробелов #include &lt;vcl.h&gt;...

Как уничтожить объект созданный CreateOleObject
Как уничтожить объект созданный CreateOleObject


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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