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

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

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

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

31.07.2014, 23:54. Просмотров 319. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2014, 23:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Созданный объект Array<char> удаляется, как только метод convert завершается (C++):

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

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

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

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

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

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

8
Croessmah
Эксперт CЭксперт С++
13412 / 7563 / 855
Регистрация: 27.09.2012
Сообщений: 18,614
Записей в блоге: 3
Завершенные тесты: 1
01.08.2014, 00:10 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от QGuest Посмотреть сообщение
Но почему?
Потому что это автоматическая переменная.

Сделайте корректный конструктор копий и оператор присваивания
1
Jewbacabra
Эксперт PHP
2546 / 2138 / 802
Регистрация: 24.04.2014
Сообщений: 6,276
01.08.2014, 00:11 #3
QGuest, не хватает конструктора копий и оператора присваивания
1
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
01.08.2014, 00:12  [ТС] #4
Цитата Сообщение от Croessmah Посмотреть сообщение
оператор присваивания
какой оператор присваивания?
0
Croessmah
Эксперт CЭксперт С++
13412 / 7563 / 855
Регистрация: 27.09.2012
Сообщений: 18,614
Записей в блоге: 3
Завершенные тесты: 1
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!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
01.08.2014, 03:34 #7
Цитата Сообщение от QGuest Посмотреть сообщение
возвращаться должен новый объект или *this?
*this
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.08.2014, 07:33 #8
QGuest, когда возвращаете ссылку, имейте в виду, что объект, на который она ссылается должен остаться существовать и после выхода из функции. Т.о. автоматические переменные, созданные внутри функции, совершенно для этого не подходят, т.к. они уничтожаются при выходе из функции.
0
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
01.08.2014, 19:37  [ТС] #9
Цитата Сообщение от Tulosba Посмотреть сообщение
Т.о. автоматические переменные, созданные внутри функции, совершенно для этого не подходят, т.к. они уничтожаются при выходе из функции.
То как правильно возвращать объекты созданные в функции?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2014, 19:37
Привет! Вот еще темы с ответами:

Как правильно завершить char array (Null terminated) - C++
В гугле вижу самые разные примеры. char* chs = new char; ... chs = '\0'; // Разве 128 существует ? ... delete chs; пробовал...

ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*') - C++
int main() { string fileName, currWord, currMax = &quot;&quot;; cin&gt;&gt;fileName; freopen(fileName, &quot;r&quot;, stdin); while...

E2034 Cannot convert 'char' to 'char *' - C++
Добрый день всем! Помогите плз исправить ошибку. Не понимаю чего она происходит. Вообщем, нужно все елементы строки text запихнуть в...

Cannot convert parameter 1 from 'char' to 'char []' - C++
#include &lt;iostream&gt; using namespace std; const int MAX=20; class base { public: virtual char sry(char str, char s)=0; }; ...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
01.08.2014, 19:37
Ответ Создать тему
Опции темы

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