c++基础 使用智能指针

简介: 三个智能指针模板(auto_ptr、unique_ptr和shard_ptr)都定义了类似指针的对象(c++11已将auto_ptr摒弃),可以将new获得(直接或间接) 的地址赋给这种对象。当智能指针过期时,其析构函数将使用delete来释放内存。

三个智能指针模板(auto_ptr、unique_ptr和shard_ptr)都定义了类似指针的对象(c++11已将auto_ptr摒弃),可以将new获得(直接或间接)

的地址赋给这种对象。当智能指针过期时,其析构函数将使用delete来释放内存。因此,如果将new返回的地址赋给

这些对象,将无需记住稍后释放这些内存:在智能指针过期时,这些内存将自动被释放。

下图说明了auto_ptr和常规指针在行为方面的差另:share_ptr和unique_ptr的行为与auto_ptr相同

使用智能指针必须包含头文件memory文件模板定义。然后使用通常的械板语法来实例化所需类型的指针。

auto_pter包含如下的构造函数

template<class x> 

class auto_ptr
{

public:

  explicit auto_ptr(X * p=0)throw();

};

thro()意味着构造函数不会引发异常;与auto_ptr一样,throw()也被摒弃。因此请求X类型的auto_ptr将获得一个

指向X类型的auto_ptr:

auto_ptr<double> pd(new double);

auto_ptr<string> ps(new string);

new double 是new返回的指针,指向新分配的内存块。它是构造函数auto_ptr<double>的参数,即对应于

原型中形参p的实参。同样,new string 也是构造函数的实参。其它两种智能指针使用同样的语法:

unique_ptr<double> pdu(new double);

shared_ptr<string> pss(new string);

我们可以这么用它

#include<memory>

void remodel(std::string & str)

{

  std::auto_ptr<std::string> ps(new std::string(str));

  ......

  if(error)

    throw exception();

  str=*ps;

  return ;

}

智能指针模板位于名称空间std中。

目录
相关文章
|
4月前
|
C++
智能指针的讲解
智能指针的讲解
47 2
|
4月前
|
安全 C++
深入理解C++11智能指针
深入理解C++11智能指针
49 1
|
Java 程序员 C#
C++11智能指针
C成也指针,败也指针。确实,指针给程序员提供了很多便利和灵活性,但是不当的指针使用也会造成很多问题。 Java和C#避免了指针(虽然C#中也能使用指针,但是估计很少有人这样做),其垃圾回收机制,给程序员减轻很多管理内存的负担。
55 0
|
4月前
|
安全 算法 程序员
【C++ 智能指针】进一步了解C++智能指针
【C++ 智能指针】进一步了解C++智能指针
68 1
|
4月前
|
存储 安全 数据库连接
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
217 0
为什么需要智能指针?
为什么需要智能指针?
37 0
|
4月前
智能指针练习
智能指针练习
|
安全 编译器 C++
C++11智能指针(二)
C++11智能指针
79 0
|
程序员 C++ 开发者
深入C++常用的三个智能指针
C++是一门强大的编程语言,但是在内存管理方面却存在着一些问题。手动管理内存不仅费时费力,而且容易出错。因此,C++中引入了智能指针这一概念,以更好地管理内存。
83 0