Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
1

Поясните по примеру из Липпмана

07.02.2016, 00:46. Показов 530. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В одном из примеров в главе Наследование есть вот такая реализация "управляющего класса"
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
class Sales_item
{
    public:
        Sales_item():p(0),use(new size_t(1)){}
        Sales_item(const Item_base&item):p(item.clone()),use(new size_t(1)){}
        Sales_item(const Sales_item&i):p(i.p),use(i.use){++*use;}
        ~Sales_item(){decr_use();}
        Sales_item&operator=(const Sales_item&);
        const Item_base*operator->()const
        {
            if(p)
                return p;
            else
                throw logic_error("unbound Sales_item");
        }
        const Item_base&operator*()const
        {
            if(p)
                return *p;
            else 
                throw logic_error("unbound Sales_item");
        }
    private:
        Item_base*p;
        size_t*use;
        void decr_use()
        {
            if(--*use==0)
            {
                delete p;
                delete use;
            }
                
        }
};
Интересен именно operator()=
C++
1
2
3
4
5
6
7
8
Sales_item&Sales_item::operator=(const Sales_item&rhs)
{
    ++*rhs.use;
    decr_use();
    p=rhs.p;
    use=rhs.use;
    return *this;
}
На сколько хватает моего понимания, этот оператор не что иное как смарт поинтер.
Вопрос следующий, оператор =, на сколько понимает мой довольно отсталый мозг
в создании не участвует ни при каких, так вот ситуация, на момент использования счетчика
C++
1
*use==5
, иными словами объект класса Sales_item уже подвязан.
Куда годится такая реализация тогда? Или это я себе бабочек накрутил?

Пример из книги Муу, Липпман"Язык програмирования С++"

Добавлено через 15 минут
Стоить ли делать такой класс синглтоном, или может как то по другому вопрос этот решить?

Добавлено через 46 секунд
Цитата Сообщение от anti-k Посмотреть сообщение
этот оператор не что иное как смарт поин
не оператор, а класс(очепятка)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2016, 00:46
Ответы с готовыми решениями:

Поясните по примеру из Эккеля
В книге Б.Эккеля встретил следующий пример. Понял что вообще не знаю синтаксис макросов и, по...

Поясните по примеру из Эккеля 2
Еще один пример из Эккеля #pragma once #include<iostream> using namespace std; class...

Упражнение из учебника С. Липпмана
1. Напишите программу, которая запрашивает у пользователя два числа и выводит на стандартное...

Стоит ли читать книгу Липпмана новичку?
Учу С++ по Липпману, дошел до классов и удивился. Он просто сразу без объяснений предоставляет...

5
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
07.02.2016, 00:51 2
Цитата Сообщение от anti-k Посмотреть сообщение
этот оператор не что иное как смарт поинтер.
Умный указатель - это шаблон проектирования. Как он может быть оператором?

new size_t(1)
Что за книги вы читаете?
0
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
07.02.2016, 01:06  [ТС] 3
castaway,
Цитата Сообщение от castaway Посмотреть сообщение
Умный указатель - это шаблон проектирования. Как он может быть оператором?
Это моя опечатка, но ИМХО, этот класс по идее должен быть похож на библиотечный shared_ptr (поправьте меня если не прав ). В любом случае интересно прав ли я в своих заблуждениях( если не прав это повод бросать лоток, арбузы, дыни и уйти с базара )А это пример из книжки Липпман, Лажойе ,Му четвертое издание. Это так,- доп. литература, я с первого прочтения редко въезжаю, приходится читать по новой и по разным источникам, больше всего мне нравится Эккель, Солтер, Липпман иногда Прата. Что из этого списка сжечь?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
07.02.2016, 01:11 4
Цитата Сообщение от anti-k Посмотреть сообщение
Это моя опечатка, но ИМХО, этот класс по идее должен быть похож на библиотечный shared_ptr
Так в чём вопрос по коду?
Или он у вас теоретический?
0
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
07.02.2016, 02:07  [ТС] 5
castaway,
вопрос по коду
C++
1
2
3
4
5
6
7
8
Sales_item&Sales_item::operator=(const Sales_item&rhs)
{
    ++*rhs.use;
    decr_use();
    p=rhs.p;
    use=rhs.use;
    return *this;
}
Как сработает этот оператор если объект Sales_item уже будет подвязан, как бэ use(счетчик ссылок, в данном случае указателей) будет ==5;
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
07.02.2016, 02:14 6
Цитата Сообщение от anti-k Посмотреть сообщение
Как сработает
Почему вы просто не подумаете или не попробуете на деле? К тому же "как сработает" - это "размытый" вопрос.

Не по теме:

Вы уж извините, но сегодня я спать.

1
07.02.2016, 02:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2016, 02:14
Помогаю со студенческими работами здесь

Не могу разобраться с примером из книги Липпмана
#include <iostream> #include <string> using std::string; string & shorterString(string &s1,...

Hello world! проблема с указателями (упражнения по книге Липпмана)
Привет народ, дело такое: Я углубился в изучение указателей и что-то ну совсееем не запускается...

Порядок выполнения тернарного оператора (Книга С.Липпмана)
Здравствуйте, все. Читаю на данный момент книгу Стенли Липпмана "Базовый курс". Глава 4. Выражения....

Задача из книги Липпмана - не могу написать красивый код
Упражнение: Напишите программу, запрашивающую у пользователя несколько значений и отображающую...

Выполняя задания из книги Стенли Липпмана допустил ошибку. Не могу понять где.
Выполняя задания из книги Стенли Липпмана не могу понять где ошибка в коде с оператором While...

Найти причины и способы исправления ошибки "C1083: Не удается открыть файл включение" (книга Стенли Липпмана)
скачал язык программирования с++ базовый курс 5 издание липман. куда устанавливать файлы которые я...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru