#include <iostream>
#include <boost/scoped_ptr.hpp>
#include <boost/intrusive_ptr.hpp>
class A{
public:
A(){ std::cout << "Взяли кота" << std::endl; }
~A(){ std::cout << "Отдали кота" << std::endl; }
};
void f(){
A* ptr = new A;
delete ptr;
}
int main(){
f();
return 0;
}
Правильный вариант с умным указателем:
void f(){
boost::scoped_ptr<A> ptr(new A);
// boost::shared_ptr<A> ptr(new A);
// boost::intrusive_ptr<A> ptr(new A);
}
А для boost::intrusive_ptr придется определить ещё функции подсчета ссылок и освобождения
памяти:
namespace boost{
template<class T>
void intrusive_ptr_add_ref(T * p){
std::cout << "Реализуем счетчик ссылок ++" << std::endl;
}
template<class T>
void intrusive_ptr_release(T * p){
std::cout << "Освобождение памяти:" << std::endl;
delete p;
}
}
А вот так делать не надо:
void f(){
A* ptr = new A;
}
P.S. Вдохновлялась "Книгой о Хаусе".
Комментариев нет:
Отправить комментарий