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

Указатель на бызовый абстрактный класс. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ преобразвоание int в char. речь не про atoi http://www.cyberforum.ru/cpp-beginners/thread189214.html
помогите разобраться, как происходит преобразование из int в char. например: int i =1000; char k=232; cout<<(int)k;каким образом на экран выводится -24. и почему на одном компутере выводится знак 'ш' а на другом 'и'?? Добавлено через 13 минут аа, блин, пардон. int i =1000; char k=i; cout<<(int)k;а что касается 'и' и 'ш', то значение (int)k = -24 везде. а знаки разные
C++ Динамический массив в Конструкторе Формы Такс это в юните: #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "MYDLL.cpp" float **a; float *x; int n=5; http://www.cyberforum.ru/cpp-beginners/thread189202.html
СИ: Вывод отдельно заглавных и прописных букв из строки C++
Нужно написать задачу на СИ, задание следущее: с клавиатуры вводится случайная строка. На экран выводятся раздельно заглавные и прописные буквы(в том же порядке). пример: строка: "1asd56ASaqrRT" Заглавные буквы: "ASRT" Остальное: "1asd56aqr"
C++ Сколько дней осталось до конца года?
Написать програму которая спрашивает у пользователя дату в формате ДД ММ ГГГГ и вычисляет сколько дней осталось до конца года. Я сначала хотел по простому, но наверное не выйдет, а массивом незнаю как, и возможно ли! #include<iostream> using namespace std; void main() { const int size =12; int Arr={31,28,31,30,31,30,31,31,30,31,30,31};
C++ Class stalker http://www.cyberforum.ru/cpp-beginners/thread189169.html
Здравствуйте Помогите с созданием классов пожалуйста Заранее спасибо Написать программу на языке C++, моделирующую поведение сборщика арте- фактов (Stalker) путём создания соответствующего класса. Все сталкеры имеют одинаковую скорость v0 без груза. Каждый сталкер имеет свой псевдоним и свою грузоподъёмность m0. Сталкер добывает (mine) артефакты массы m, затем пытается из вынести...
C++ Как работает данная программа изучаю тему преобразования типов (в данном случае тип Counter преобразуется в int) и вот набрала код из книги, но не понимаю как он работает и почему: #include <iostream> class Counter { public: Counter(); Counter(int val); ~Counter() {} подробнее

Показать сообщение отдельно
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
10.11.2010, 23:03     Указатель на бызовый абстрактный класс.
Вся работа с умными указателями, кроме их объявления, должна происходить точно так же, как и с обычными.

Для начала попробуй std::auto_ptr. Возможно, он удовлетворяет твоим потребностям.

Если же нет, то можешь попробовать вот это:
xtl_memory.h

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
#ifndef _XTL_MEMORY_H
#define _XTL_MEMORY_H
 
#include <memory>
#include <map>
 
namespace xtd {
 
//!     Умный указатель.
/*! 
        Умеет работать только с одной иерархией, т.е. только с классом "type" и его наследниками. К другим типам не преобразуется.
*/
template <typename type>
class shared_ptr {
private:
    // ---- Определения ---------------------------------------------------------------------------
    
    class traits {
    public:
        traits (type * some_pointer) : pointer(some_pointer), reference_count(1) {}
        ~traits () { delete pointer; }
        
        void retain () { ++reference_count; }
        bool release () { return --reference_count == 0; }
        
        type * get () const { return pointer; }
        
    private:    
        type * const pointer;
        int reference_count;
    };
    
public:
    // ---- Создание и уничтожение ----------------------------------------------------------------
    
    shared_ptr () : m_traits(0) {}
    shared_ptr (type * some_pointer) : m_traits(new traits(some_pointer)) {}
    shared_ptr (const shared_ptr & some_shared_pointer) : m_traits(0) { copy(some_shared_pointer); }
    ~shared_ptr () { release(); }
    
    // ---- Модификация ---------------------------------------------------------------------------
    
    shared_ptr & operator = (const shared_ptr & some_shared_pointer) {
        copy(some_shared_pointer);
        
        return *this;
    }
    
    // ---- Операции сравнения --------------------------------------------------------------------
    
    bool operator == (const shared_ptr & some_shared_pointer) const { return m_traits == some_shared_pointer.m_traits; }
    bool operator != (const shared_ptr & some_shared_pointer) const { return m_traits != some_shared_pointer.m_traits; }
    
    // ---- Доступ --------------------------------------------------------------------------------
    
    type & operator * () const { return *m_traits->get(); }
    type * operator -> () const { return m_traits->get(); }
 
protected:
    // ---- Служебные функции ---------------------------------------------------------------------
    
    void retain () const { if (m_traits) m_traits->retain(); }
    void release () const { if (m_traits && m_traits->release()) delete m_traits; }
    
    void copy (const shared_ptr & some_shared_pointer) {
        release();
        m_traits = some_shared_pointer.m_traits;
        retain();
    }
    
private:
    traits * m_traits;
};
 
}
 
#endif

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