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

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

Восстановить пароль Регистрация
 
 
MishaMoix
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 99
12.08.2014, 21:07     Shared_str реализация - На выходе из деструктора падает программа #1
Решил реализовать 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2014, 21:07     Shared_str реализация - На выходе из деструктора падает программа
Посмотрите здесь:

C++ После объявления деструктора программа перестает выводить данные на экран
C++ Программа падает при чтении из файлов
C++ Падает программа
C++ Почему падает программа?
C++ Падает программа при использовании DLL
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
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 реализация - На выходе из деструктора падает программа
Еще ссылки по теме:

Программа падает без printf C++
Программа выдаёт ошибку при вызове деструктора C++
C++ Очередное деструктивное: при вызове деструктора все падает

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 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 реализация - На выходе из деструктора падает программа
Ответ Создать тему
Опции темы

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