Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
3 / 3 / 1
Регистрация: 04.04.2018
Сообщений: 351

Конструктор удаляет строку после конкатенации

02.06.2019, 10:02. Показов 1847. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Конструктор удаляет возвращаемую строку после конкатенации(newStr), конструктор копирования есть, что не так?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream>
using namespace std;
class MyString;
int strLength(const char *str);
int strLength(const char *str) {
 
    int counter = 0;
    while (str[counter] != '\0')
    {
        counter++;
    }
    return counter;
}
 
class MyString
{
private:
    char *str;
public:
    MyString()
    {
        str = nullptr;
    }
 
    MyString(const char *str)
    {
        int length = strLength(str);
        this->str = new char[length + 1];
        for (int i = 0; i < length; i++)
        {
            this->str[i] = str[i];
        }
        this->str[length] = '\0';
    }
    MyString(const MyString &other)
    {
        int length = strlen(other.str);
        this->str = new char[length + 1];
 
        for (int i = 0; i < length; i++)
        {
            this->str[i] = other.str[i];
        }
        this->str[length] = '\0';
    }
    ~MyString()
    {
        delete[] this->str;
    }
 
    void Getter();
 
    MyString& operator = (const MyString &other)
    {
        if (this->str != nullptr)
        {
            delete[] str;
        }
        int length = strlen(other.str);
        this->str = new char[length + 1];
 
        for (int i = 0; i < length; i++)
        {
            this->str[i] = other.str[i];
        }
        this->str[length] = '\0';
        return *this;
    }
    MyString& operator + (const MyString &other)
    {
        MyString newStr;
        int lengthOther = strLength(other.str);
        int lengthThis = strLength(this->str);
        newStr.str = new char[lengthOther + lengthThis + 1];
        int i = 0;
        for (; i < lengthThis; i++)
        {
            newStr.str[i] = this->str[i];
        }
        for (int j = 0; j < lengthOther; i++, j++)
        {
            newStr.str[i] = other.str[j];
        }
        newStr.str[lengthOther + lengthThis] = '\0';
        return newStr;
    }
    
};
 
 
void MyString::Getter()
{
    if (str != nullptr)
    {
        cout << str << endl;
    }
    else {
        cout << "Error or Empty string" << endl;
    }
}
int main()
{
    MyString str("Hello World");
    MyString str2("Second String");
    MyString str3;
    str.Getter();
    str2.Getter();
    str3.Getter();
    cout << "--------------------------------------" << endl;
    //str3 = str2;
    //str3.Getter();
    str3 = str2 + str;
    str3.Getter();
    system("pause");
    return 0;
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.06.2019, 10:02
Ответы с готовыми решениями:

Формат даты в поле формы после конкатенации
Добрый день! Имеется форма с полем . Формат поля - &quot;Длинный формат даты&quot;. Данные для формы берутся из таблицы с одноименными полями. ...

Запрос удаляет не ту строку из таблицы
Помогите кто-нибудь, удаляет почему-то не указанную строку из таблицы, а первую. Вот метод удаления. Код: private void...

Не удаляет строку с определенным словом
Доброго времени суток. Проблемка маленькая нарисовалась вчера. В руки попал немалых размеров (1,2 Gb) XML файл, который необходимо...

3
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
02.06.2019, 14:09
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

Цитата Сообщение от dimmarvel Посмотреть сообщение
Конструктор удаляет возвращаемую строку после конкатенации(newStr)
Ну во первых, конструкторы ничего не удаляют (разве что их напрямую об этом попросить).
Во вторых, вы возвращаете ссылку на локальный объект.
0
3 / 3 / 1
Регистрация: 04.04.2018
Сообщений: 351
02.06.2019, 16:58  [ТС]
zayats80888, деструктор' опечатался, подскажите что нужно сделать, не понимаю что плохого в том что я возвращаю ссылку на локальный объект, он удалится после того как я выйду из области видимости конструктора? Тогда как вернуть строку которую я создал? Не хватает знаний
Просто я смотрю в отладчике, строка есть, а после того как я перехожу на return он переходит в деструктор удаляет её и выходит, это понятно что он должен её удалить после того как я использовал, но ведь он должен вернуть её передать и потом удалить или... я запутался)
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
02.06.2019, 17:05
Лучший ответ Сообщение было отмечено dimmarvel как решение

Решение

Цитата Сообщение от dimmarvel Посмотреть сообщение
Тогда как вернуть строку которую я создал?
Цитата Сообщение от dimmarvel Посмотреть сообщение
MyString& operator + (const MyString &other)
C++
1
MyString operator + (const MyString &other)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.06.2019, 17:05
Помогаю со студенческими работами здесь

Написать макрос, который удаляет строку
Уважаемые форумчане, добрый день! Прошу помочь с макросом в Excel. Прикладываю к сообщению пример. Нужно написать макрос, который...

Функция, которая удаляет строку из текста
На вход: полное имя текстового файла, номер строки, которую надо удалить. На выход: true если удалось удалить строку, иначе false. ...

Программа, которая удаляет первое вхождение s в строку s
Помогите только изучаю PHP Составить программу, которая удаляет первое вхождение s в строку s сдвинув при этом строку справа, а на начало...

Построчное удаление в Memo удаляет через строку
Доброго времени, товарищи программисты и сисадмины! Сразу к делу: Необходимо из Memo удалить кусок текста, длиной 2005 символов. ...

Программа , вводит с клавы строку и удаляет лишние пробелы
1)Програма которая вводит с клавиатуры строку и находит длину самого короткого слова(слова-группа символов разделеные пробелами) 2)...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru