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

Почему не вызывается конструктор копирования? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Поменять соседние слова местами http://www.cyberforum.ru/cpp-beginners/thread186801.html
задание: Дано предложение. Вывести его на экран, меняя местами каждые два соседних слова. Никак не могу сообразить что нужно делать, что использовать. уде не 1-й день мучаюсь над этой задачей. подскажите хотя бы алгоритм решения :(
C++ Программа со структурами. Не могли бы Вы помочь мне с написанием этой программы. Описать структуру с именем NOTE, содержащую следующие поля: NAME - фамилия, имя; TEL - номер телефона; BDAY - день рождения (массив из трех чисел). Написать программу, отдельными функциями выполняет следующие действия: • ввод с клавиатуры данных в массив BLOCKNOTE, состоящий из N переменных типа NOTE; • упорядочение записей по... http://www.cyberforum.ru/cpp-beginners/thread186790.html
C++ возврат по ссылкам
На защиту лаб.работы препод требует рассказать о возврате по ссылкам. Зачем они? Как они описываются, какой у них плюс?
упорядочен ли массив по неубыванию, по невозрастанию или не упорядочен вообще C++
Блин вест мозг себе уже вынес, никак не могу решить задачу(((. Помогите кто чем может. Задача:Написать подпрограмму,которая проверяла бы, упорядочен ли массив по неубыванию (Xi<=Xi+1),по невозрастанию (Xi=>Xi+1) или не упорядочен вообще. привести пример использования подпрограммы.
C++ Интегрирование по методу Симпсона http://www.cyberforum.ru/cpp-beginners/thread186785.html
написать программу которая посчитала бы интеграл сos(x+x^3)dx по методу симпсона с точностью до одной тысячной.буду оч.благодарен)))
C++ getline по 2 раза Привет. Почему в MSVC, если написать один раз getline(std::cin, path); то ввод не происходит? приходится писать 2 раза case 9: { std::string path(""); std::cout << "Введите имя файла: "; getline(std::cin, path); getline(std::cin, path); loadUFromFile(currGeneration, ROW,COL, path); break; подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
12.05.2011, 12:15  [ТС]     Почему не вызывается конструктор копирования?
ОК, а тогда для чего вообще придумана такая штука, как создание собственных конструкторов копирования? Если встроенный с успехом справляется с возложенной на него задачей? Вот одна из ситуаций:если один из членов объекта X будет указывать допустим, на строку. И вот: я пишу конструктор копирования, который создаёт объект Y с указателем на новую строку с тем же содержанием, что и в копируемом объекте (применяю посимвольное копирование строк).

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
#include <iostream>
#include <locale>
 
using namespace std;
class arr {
  public:
    arr(){p= new char [7]; strcpy (p, "stroka");};
    arr(const arr &obj);
    ~arr(){delete p;}
  private:
    char* p;          
};
 
 
//Вот в этом конструкторе строка копируется посимвольно
arr::arr(const arr &obj){
 p= new char [7];
 strcpy (p, obj.p);
 cout << "Вызов копирующего конструктора" << "\n";
}
 
 
//А вот по возвращении из этой функции и должен будет ызваться МОЙ конструктор копирования
//Но он не вызовется  
arr get_object () {
 arr obj;
 return obj; 
}
 
 
 
 
int main(){
 
  arr x= get_object();
  //А теперь мы имеем, что x.p указывает на строку, КОТОРОЙ НЕТ, ибо
  //для указателя, который на неё указывал, была выполнена операция:
  //delete p (по выходе из функции get_object обюъект obj был разрушен и был вызван его деструктор)         
  
  getchar ();
  return 0;
}
Всё, приехали. И такая ситуация как раз очень-очень часта; в том учебнике, где будет описано написание конструкторов копирования, считай, что там будет описана такая же ситуация. И это не 1%, согласись?
...И при её возникновении будет крах. То ли компилятор вставит то ли нет консруктор копирования.
А по опциям- у меня все опции отключены; да и простая компиляция из командной строки

C++
1
g++ main.cpp
приводит к результату невызывания моего конструктора копирования.

Добавлено через 3 минуты
Вообще любой АВТОРСКИЙ конструктор копирования (что бы он не делал) подразумевает отход от просто посимвольного копирования байтов, а некоторый СВОЙ код, которой не выполнится.
 
Текущее время: 04:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru