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

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

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

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

12.08.2014, 21:07. Просмотров 736. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2014, 21:07     Shared_str реализация - На выходе из деструктора падает программа
Посмотрите здесь:
C++ Очередное деструктивное: при вызове деструктора все падает
Реализация конструкторов и деструктора C++
Программа выдаёт ошибку при вызове деструктора C++
C++ После объявления деструктора программа перестает выводить данные на экран
C++ Падает программа
C++ Почему падает программа?
Падает программа с opencv C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
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++ Почему работает программа при выходе за пределы массива?
Неожиданно падает программа с библиотекой ffmpeg C++
C++ Программа падает при чтении из файлов
C++ Падает программа при использовании DLL

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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 реализация - На выходе из деструктора падает программа
Ответ Создать тему
Опции темы

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