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

Реализация собственного умного укзателя - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Описать класс "Конус" http://www.cyberforum.ru/cpp-beginners/thread642334.html
Язык С 1. Опишите класс "Конус" Данные класса: координаты центра основания, радиус основания, высота. Конструкторы класса: конструктор по умолчанию, конструктор конуса с центром в начале координат, конструктор произвольного конуса. 2. Определите методы: ввод конуса, вывод на экран, определение площади поверхности, определение объёма конуса. 3.Объявите конус с центром в начале координат и...
C++ деббагинг и отладка c++ С чего начать,о отладки вообще ничего не знаю и о дебагинге. http://www.cyberforum.ru/cpp-beginners/thread642303.html
C++ Исключения в классах
Здравствуйте. Какими средствами правильней всего сделать обработку исключений в классах? /* например, эта функция */ int SomeClass::someFunc( int some_arg ) { return some_arg * 18 } /* для нормальной работы должна получать числа от 0 до 42. Как реагировать на остальное? */
C++ как сделать консольное окно поверх всех окон
сабж было бы очень удобно дебагить если можно было бы это сделать заранее спасибо
C++ [c++] fgets не могу понять почему это не работает http://www.cyberforum.ru/cpp-beginners/thread642263.html
Вообщем на диске C:\ лежит 3 файла 1 Файл test.txt 2 Файл 1.dll 3 Файл 2.dll в test.txt записано: 1.dll 2.dll
C++ Отобразить указанное число строк со звездочками, с одной звездочкой в первой строке, двумя — во второй и т.д Вот задача: Напишите программу, использующую вложенные циклы, которая запрашивает у пользователя значение количества строк для отображения. Затем она должна отобразить указанное число строк со звездочками, с одной звездочкой в первой строке, двумя — во второй и т.д: В каждой строке звездочкам должны предшествовать точки — в таком количестве, чтобы общее число символов в каждой строке... подробнее

Показать сообщение отдельно
Philosophistic
0 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 9
25.08.2012, 10:18     Реализация собственного умного укзателя
Доброго времени суток!

При самостоятельной реализации умного указателя столкнулся с проблемой при удалении самого указателя.

Код программы имеет вид:
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
#pragma once
template <class Object>
class Smart_ptr
{
public:
    Smart_ptr<Object>( Object *ptr = new Object )
    {
        this->ptr = ptr;
    }
    Smart_ptr<Object>( const Smart_ptr<Object> &obj )
    {   
        ptr = obj.ptr;
    }
    ~Smart_ptr<Object>( void )
    {
        delete ptr;
    }
 
    bool isNull( void )
    {
    return (ptr == 0);
    }
 
    Smart_ptr<Object> &operator=( const Smart_ptr<Object> &obj )
    {
    if ( this != &obj )
    {
        delete ptr;
        ptr = obj.ptr;
    }
    return *this;
    }
    Object &operator*( void ) const
    {
        return *ptr;
    }
    Object *operator->( void ) const
    {
    return ptr;
    }
    Object &operator[]( const int index )
    {
        if ( ptr != 0 )
    {
        return ptr[ index ];
    } else
    {
        cout << endl << "Unable to get the element with index = " << index;
        exit( 0 );
    }
    }
 
private:
    Object *ptr;
};
Код прекрасно работает до двух моментов:
1) До момента вызова деструктора.
2) До момента использования оператора присваивания.

Если в обоих случаях закомментировать строку
C++
1
delete ptr
, то никаких проблем не возникает. Указатель в исходнике ссылается на структуру.

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