Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Что такое смарт поинтер?


Автор: Graf_h 28.3.2008, 11:42
Здравствуйте! расскажите пожалуйста что такое смарт поинтер и для чего он нужен!Никак не могу понять!
Заранее спасибо

Автор: MAKCim 28.3.2008, 11:52
это класс, безопасно моделирующий семантику обычного указателя путем переопределения соответствующих операторов
безопасное моделирование семантики подразумевает отсутствие утечек памяти и потенциального обращения по невалидным адресам
там, где нужно такое поведение, он и применяется

Автор: Graf_h 28.3.2008, 12:07
MAKCim,  можна примерчик! очень нужно. спасибо

Автор: MAKCim 28.3.2008, 12:25
Цитата(Graf_h @  28.3.2008,  12:07 Найти цитируемый пост)
можна примерчик! очень нужно. спасибо 

пример чего?

Автор: Graf_h 28.3.2008, 12:53
Цитата(MAKCim @  28.3.2008,  12:25 Найти цитируемый пост)
пример чего?

Простой пример с смарт поинтером и его использование!

Автор: korian 28.3.2008, 13:11
вот упрощенный вариант std::auto_ptr
Код

class A 
{
public:
    void foo() {}
};

class APtr
{
public:
    explicit APtr(A* a) : m_a(a) {};
    ~APtr() {delete m_a;}
    A* operator -> () {return m_a;}
private:
    APtr APtr(const APtr&);
    APtr operator = (const APtr&);
    A* m_a;
};

typedef std::auto_ptr<A> APtr2;

void main()
{
    APtr objptr(new A);
    objptr->foo();
    APtr2 objptr2(new A);
    objptr2->foo();
}


Автор: Graf_h 28.3.2008, 13:28
korian, я так понял что A* m_a и есть смарт поинтер! но не пойму для чего он нужен

Автор: korian 28.3.2008, 13:31
смарт поинтер тут APtr и APtr2
а нужны они за тем, чтобы не следить за удалением, особенно в таких случаях:
Код


A* aptr = new A;

if (....)
{
     return; //оч. частая ошибка, забыли удалить aptr, а если не забыли то замучаемся помнить.
}

delete aptr;
return;


Добавлено @ 13:39
а вообще, смарт поинтеры - это продолжение идеомы ресурс должен пренадлежать объекту.
если выделяем какой-то ресурс - сразу передаем его некоторому объекту, а он уже сам заботится когда этот ресурс освободить
в случае с std::auto_ptr - освобождение ресурса при выходе из области действия.
boost::shared_ptr - освобождение при отсутствии ссылок на ресурс.
почитайте - http://www.insidecpp.ru/art/
учень увлекательно  smile 
а потом вот это - http://www.insidecpp.ru/books/cpp_coding_standards/

Автор: Graf_h 28.3.2008, 15:13
korian,  спасибо! +1 тема закрита

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)