在 .h 文件中生命智能指针,在 .cpp 文件中使用

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
//头文件位于boost库中
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>

//智能指针对象
class TSObject
{
public:
void f();
{
std::cout << "ptr";
}
};

//声明智能指针对象
typedef boost::shared_ptr<TSObject> TSObjectPtr;

//创建智能指针对象(推荐使用第二种)
TSObjectPtr p = TSObjectPtr(new TSObject);

TSObjectPtr p = Boost::make_shared<TSObject>();

//调用函数
p->f();

//智能指针释放原来的封装对象
p.reset(new TSObject());

智能指针类型转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <boost/enable_shared_from_this.hpp>
//enable_shared_from_this.hpp提供了智能指针相关功能
class TSParentObject::publicboost::enable_shared_from_this<TSObject>
{
public:
void f()
{
std::cout << "parent";
}
};
//声明父类智能指针对象
typedef boost::shared_ptr<TSParentObject> TSParentObjectPtr;

class TSChildrenObject : public TSParentObject
{

};
//声明子类智能指针对象
typedef boost::shared_ptr<TSChildrenObject> TSChildrenObjectPtr;
//智能指针转换宏
#define TS_CAST(from ,to) boost::dynamic_pointer_cast<to::element_type>(from)
//如子类智能指针转换为父类智能指针
TSChildrenObjectPtr Children = boost::make_shared<TSChildrenObject>();
TSParentObjectPtr Parent = TS_CAST(ChildObject, TSParentObjectPtr);