353 / 34 / 7
Регистрация: 02.07.2008
Сообщений: 311
|
|
1 | |
Вопрос по основам С++02.07.2008, 20:42. Показов 1492. Ответов 4
Метки нет (Все метки)
Код
Страуструп 3 -е Специальное издание стр 297 class Unique_handler { private: // операция копирования закрыты с целью // предотвращения копирования ($11.2.2) Unique_handler(const Unique_handler&); Unique_handler& operator=(const Unique_handler&); public: // ... } struct Y { //... Unique_handler a; //требует явной инициализации } Y y1; Y y2 = y1; // ошибка: невозможно скопировать Y::a Обратите внимание, что в резултате работы копирующего конструктора по умолчанию, член, являющийся ссылкой, в обеих копиях ссылается на один и тот же объект. Это может привести к проблеме, если объект, на который он ссылается, предполагается удалить. Код
член, являющийся ссылкой, в обеих копиях ссылается на один и тот же объект.
0
|
02.07.2008, 20:42 | |
Ответы с готовыми решениями:
4
Вопросы по основам C++ Тест по основам Задача по основам Задания по основам информатики |
353 / 34 / 7
Регистрация: 02.07.2008
Сообщений: 311
|
|
03.07.2008, 05:25 [ТС] | 3 |
Ну не знаяю чего то не очень похоже.
1. Получается что y2.a это ссылка. А я думаю что это не ссылка. А если это не ссылка, то у каждой struct Y будет свой a (Unique_handler). Или компилятор должен сделать так, что если конструктор копирования у Unique_handler в private, то созданный объект не копируется а на него делается как ссылка в структуру, которая его пытается скопировать, но мне об этом не известно. Почему должна быть ссылка? 2. Конструктор копирования Unique_handler в private мы его копировать не можем. Следовательно этот пример даже компилироваться не должен. 3. "Это может привести к проблеме, если объект, на который он ссылается, предполагается удалить." Вот мне интересно как в приведенном коде можно удалить объект. Если эта фраза касается именно этого кода. Этот объект можно удалить только вместе со структурой, а структура должна удалиться по окончанию работы программы или функции так как это автоматическая переменная. То есть удалятся сразу и y1 и y2, тогда где проблема? Может не думать что здесь есть какая - то тонкая идея, а просто код не удачно подобран? Или я чего то не понял? Где проблема и вчем она заключается?
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
03.07.2008, 13:07 | 4 |
Эх...я и не говорил, что он будет компилироваться.
Просто, если бы он был нормально написан, то: Y y2 = y1; вызовет Код
y2.a = y1.a; Все, что я хотел сказать. Да и вообще такой код копирующего конструктора небезопасный. Надо const ставить в начале. А так, конечно, он не будет компилиться. Это не обсуждается...
0
|
7 / 7 / 0
Регистрация: 11.01.2010
Сообщений: 123
|
|
14.01.2010, 07:46 | 5 |
0
|
14.01.2010, 07:46 | |
14.01.2010, 07:46 | |
Помогаю со студенческими работами здесь
5
Тест по основам информатики 4 задачи по основам программирования Посоветуйте литературу по основам C# Вопросы по основам языка Лабораторной по основам криптографии Видеокурс по основам программирования Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |