boost::scoped_ptr:
属于 boost 库,定义在 namespace boost 中,
包含头文件 #include<boost/smart_ptr.hpp> 便可以使用。boost::scoped_ptr 跟 std::auto_ptr 一样,可以方便的管理单个堆内存对象,特别的是,boost::scoped_ptr 独享所有权,避免了 std::auto_ptr 恼人的几个问题。
我们还是从代码开始分析:
class Simple {
public:
public:
Simple(int param = 0) {
number = param;
std::cout << "Simple: " << number << std::endl;
}
number = param;
std::cout << "Simple: " << number << std::endl;
}
~Simple() {
std::cout << "~Simple: " << number << std::endl;
}
void PrintSomething() {
void PrintSomething() {
std::cout << "PrintSomething: " << info_extend.c_str() << std::endl;
}
public:
std::string info_extend;
int number;
};
std::string info_extend;
int number;
};
//测试函数
void TestScopedPtr() {
boost::scoped_ptr<Simple> my_memory(new Simple(1)); //创建一个scope_ptr
if (my_memory.get()) { //获取原始类对象
my_memory->PrintSomething();
my_memory.get()->info_extend = "Addition";
my_memory->PrintSomething();
(*my_memory).info_extend += " other";
my_memory->PrintSomething();
// my_memory.release(); // 编译 error: scoped_ptr 没有 release 函数
std::auto_ptr<Simple> my_memory2;
//my_memory2 = my_memory; // 编译 error: scoped_ptr 没有重载 operator=,不会导致所有权转移
}
}
int _tmain(int argc, _TCHAR* argv[])
{
{
TestAutoPtr();
return 0;
}
return 0;
}
//缺点:由于 boost::scoped_ptr 独享所有权,当我们真真需要复制智能指针时,需求便满足不了了,如此我们再引入一个智能指针,专门用于处理复制,参数传递的情况,这便是如下的 boost::shared_ptr。