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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как получить указатель на функцию http://www.cyberforum.ru/cpp-beginners/thread1241733.html
Здравствуйте! Подскажите, как получить указатель на функцию? Амперсанд не помогает. class Menu{ private: // Создал указатель на функцию, вроде, верно. void(*m_PrintStyle)...
C++ Шифрование файлов и папок с установкой на них пароля Привет. Мне нужно зашифровать файл/папку и поставить пароль на нее/него. Что посоветуете? Заранее спасибо. P.S. так как шифрование тема сложная, подумываю о XOR. Вопрос: как лучше хранить пароль,... http://www.cyberforum.ru/cpp-beginners/thread1241732.html
Оцените тетрис C++
Написано коряво, но это первый блин. Мне бы очень хотелось его дошлифовать до красивого внешнего и внутреннего содержания. Если участники форума мне в этом помогут, буду признателен. Test_Wi32.cpp...
Проверить, имеют ли три введенных пользователем числа одинаковую четность C++
Проверить, имеют ли три введенных пользователем числа одинаковую четность #include<iostream.h> main() { int b,d,x; cout<<"enter b "; cin>>b; cout<<"enter d ";
C++ Разобрать строку кода http://www.cyberforum.ru/cpp-beginners/thread1241641.html
Часть программы, если что // Game engine struct Piece { struct { unsigned short s; } shape; int x : 8, y : 8, color : 14; unsigned r : 2; template<typename T> //...
C++ Нахождение ближайших точек методом декомпозиции - не понятен алгоритм Преподаватель задал решить задачу по нахождению ближайших точек методом декомпозиции, но мне не понятен алгоритм, гугл не дал мне необходимой информации, объясните пожалуйста. подробнее

Показать сообщение отдельно
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
14.08.2014, 19:20
MishaMoix, Если интересно, вот тебе небольшой пример:
Кликните здесь для просмотра всего текста
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
 
template <typename T>
class storage
{
public:
    explicit storage(T * p)
        : counter_(0), data_(p)
    { }
    ~storage()
    {
        delete data_;
    }
    void inc_ref()
    {
        ++counter_;
    }
    void dec_ref()
    {
        if(--counter_ == 0)
        {
            delete this;
        }
    }
 
private:
    storage & operator=(storage const &);
    storage(storage const &);
 
    size_t counter_;
    T *    data_;
};
 
namespace my
{
 
template <typename T>
class shared_ptr
{
public:
    shared_ptr()
        : st_(0)
    { }
 
    shared_ptr(T * p)
        : st_(0)
    {
        if(p != 0)
        {
            st_ = new(std::nothrow) storage<T>(p);
            if(st_ != 0)
            {
                st_->inc_ref();
            }
            else
            {
                delete p;
                throw std::bad_alloc();
            }
        }
    }
    shared_ptr(shared_ptr const & x)
        : st_(x.st_)
    {
        if(st_ != 0)
        {
            st_->inc_ref();
        }
    }
 
    ~shared_ptr()
    {
        if(st_ != 0)
        {
            st_->dec_ref();
        }
    }
 
    shared_ptr & operator=(shared_ptr const & x)
    {
        shared_ptr(x).swap(*this);
        return *this;
    }
 
    shared_ptr & operator=(T * x)
    {
        shared_ptr(x).swap(*this);
        return *this;
    }
 
    void swap(shared_ptr & x)
    {
        storage<T> * tmp = st_;
        st_ = x.st_;
        x.st_ = tmp;
    }
 
private:
    storage<T> * st_;
};
 
}
 
class Object
{
public:
    Object()  { std::cout << "Object()\n";  }
    ~Object() { std::cout << "~Object()\n";}
};
 
 
int main()
{
    my::shared_ptr<Object> a(new Object());
    my::shared_ptr<Object> b = a;
    my::shared_ptr<Object> c;
    c = b;
}

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