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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
MishaMoix
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 99
#1

Shared_str реализация - На выходе из деструктора падает программа - C++

12.08.2014, 21:07. Просмотров 696. Ответов 21
Метки нет (Все метки)

Решил реализовать shared_str

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
class shared_ptrMy
{
    private:
        Storage *st;
 
 
    public:
        shared_ptrMy(){};
        shared_ptrMy(Object*);
        ~shared_ptrMy();
        shared_ptrMy& operator=(shared_ptrMy&);
};
 
shared_ptrMy::shared_ptrMy(Object *o){
    st = new Storage(o);
}
 
shared_ptrMy& shared_ptrMy::operator=(shared_ptrMy &o){
    st->Copy(o.st);
    st = o.st;
    Storage *a = st;
    return *this;
}
 
 
 
shared_ptrMy::~shared_ptrMy(){
        delete st;
        st = NULL;
}

для этого я создал класс контейнер store
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
class Storage
{
    public:
        Storage(Object *o){
            pObj = o;
            counter = 1;
        }
        ~Storage(){
 
            int &k = counter;
            --counter;
 
            if(counter == 0)
                delete pObj;
        }
 
       Object& getObject(){
            return *pObj;
        }
 
        void Copy(Storage *s){
            ++(s->counter);
        }
 
 
   // private:
        Object *pObj;
        int counter ;
при этом counter работает нормально. Но когда counter == 0 вызывается деструктор для object все удаляется и на выходе из деструктора падает программа. Подскажите, что это может быть
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
14.08.2014, 20:12     Shared_str реализация - На выходе из деструктора падает программа #21
Цитата Сообщение от MishaMoix Посмотреть сообщение
Я только не понял как и для чего swap?
Copy-And-Swap
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2014, 22:34     Shared_str реализация - На выходе из деструктора падает программа
Еще ссылки по теме:

C++ Очередное деструктивное: при вызове деструктора все падает
Падает программа с opencv C++
Реализация конструкторов и деструктора C++
Неожиданно падает программа с библиотекой ffmpeg C++
C++ Почему работает программа при выходе за пределы массива?

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
14.08.2014, 22:34     Shared_str реализация - На выходе из деструктора падает программа #22
DrOffset, ещё можно провести микрооптимизацию:
C++
1
2
3
4
5
shared_ptr & operator=(shared_ptr const & x)
{
   shared_ptr(x).swap(*this);
   return *this;
}
Заменить на:
C++
1
2
3
4
5
shared_ptr & operator=(shared_ptr x)
{
   x.swap(*this);
   return *this;
}
Yandex
Объявления
14.08.2014, 22:34     Shared_str реализация - На выходе из деструктора падает программа
Ответ Создать тему
Опции темы

Текущее время: 13:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru