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

Почему создаются новые объекты? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как нарисовать http://www.cyberforum.ru/cpp-beginners/thread245002.html
Необходимо с помощью кода нарисовать 5 квадратов, расположенные друг за другом (это будут кабинеты), а в каждом квадрате написать допустим номер кабинета или какие процедуры там проводят. Затем около каждого кабинета должен идти отсчёт времени в обратном порядке... допустим в одном кабинете 20 минут, в другом 10 минут и так далее... Может кто-нибудь знает как это реализовать. Заранее спасибо
C++ Наследование Используя механизм наследования реализовать иерархию: фигура->круг ..........->треугольник ..........->квадрат (все стрелки отходят от "фигура") У каждого класса присутствуют методы: конструкторы инициализации, ввода, вывода данных, а также методы вычисления периметра и площади соответствующей фигуры. http://www.cyberforum.ru/cpp-beginners/thread244999.html
Написать функцию, которая удваивает каждый символ строки C++
Народ,спасайте! Не могу написать программу! Написать функцию, которая удваивает каждый символ строки. Заголовок функции: void doubleChar (char * s); Написать программу, которая принимает от пользователя набор строк (массив строк), удваивает каждый символ каждой строки и выводит преобразованные строки на экран! Пожалуйста,кто может,помогите!
C++ Шаблонная функция С++
Помогите пожалуйсто понять ошибку Используется шаблонная функция в первом вызове она отображает значение типа int во втором типа double ошибку пишет в 10 строке. Вот такую D:\C++\C++8\4\123.cpp(10) : error C2782: 't __cdecl Max5(t ,t)' : template parameter 't' is ambiguous could be 'int' or 'double' Вот код #include <iostream> using namespace std; template <class t>
C++ Тренировка http://www.cyberforum.ru/cpp-beginners/thread244961.html
Так как я только недавно стал постигать азы с++ мне трудно пока учить синтаксис и тем более все его нюансы. Поэтому я считаю, что постоянные тренировки мне необходимы. Мне нужен такой ресурс на котором есть множество задачек на разные темы - от простых (хеллоу ворлд) до сложных (на будующие). Пока таких ресурсов мною обнаружено не было и поэтому я прошу у вас помощи, если вы знаете, что либо...
C++ Как печатать в cout << " РУССКИМИ БУКВАМИ" Собственно проблема не втом чтобы наляпать в кауте русскими буквами, а чтобы потом эти русские буквы вывело на екран, а не абракадабру..... подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2914 / 1343 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
19.02.2011, 10:35     Почему создаются новые объекты?
Цитата Сообщение от OMGHero Посмотреть сообщение
Какой удаляется объект?
Временный. Который программа создаст для того, чтобы передать копию *this в
C++
1
2
3
4
5
* * * * data operator= (data& v)
* * * * {
* * * * * * * * str = v.str;
* * * * * * * * return data(str);
* * * * }
Вы же не ссылку возвращаете, и не указатель, а копию данных. Вот и создается копия класса data, которая удаляется после возвращения значения.

Кстати, некорректно работаете со строками. Вот пример, в котором никто никуда лишний раз не удаляется и содержимое класса Data передается по ссылке:
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
#include <cstdio>
#include <cstring>
 
class Data {
 public:
  Data() : string_(NULL) {}
  explicit Data(const char *string) : string_(NULL) {
    SetData(string);
  }
  ~Data() {
    printf("Debug: Calling destructor %d, '%s'.\n", (int)this, string_);
    delete string_;
  }
  void SetData(const char *string) {
    delete string_;
    string_ = strcpy(new char[strlen(string) + 1], string);
  }
  char *GetData() const { return string_; }
  Data &operator=(const Data &other) {
    if (this != &other)
      SetData(other.GetData());
    return *this;
  }
 private:
  char *string_;
};
 
int main(int argc, char *argv[]) {
  Data a("world!"), b("Hello"), c;
  c = a;
  a = b;
  b = c; // Меняем местами a и b;
  printf("%s %s\n", a.GetData(), b.GetData());
  return 0;
}
Цитата Сообщение от OMGHero Посмотреть сообщение
Не понятно что тут создается:
C++
1
2
3
4
5
data operator= (data& v)
{
        str = v.str;
        return *this; // возвращаем по значению, то бишь копию *this
}
Как что? Копия *this, конечно.
 
Текущее время: 06:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru