c++11智能指针

Noella ·
更新时间:2024-09-20
· 923 次阅读

智能指针

    智能指针是行为类似于指针的类对象。可以帮助管理动态内存分配。普通指针分配内存后都必须释放内存 new 之后需要使用 delete 否则内存泄漏。智能指针类对象封装了自动释放内存的功能 从而避免内存泄漏

例如

void remodel(std::string & str) { std::string * ps = new std::string(str); //str = ps; return; //内存泄漏 } void remodel1(std::string & str1) { std::shared_ptr ps(new std::string(str1)); str1 = *ps; //delete ps; //智能指针自动释放内存 return; }

有关智能指针的注意事项

      先来看下面的赋值语句:

void func1() { std::auto_ptr ps(new std::string("test1")); std::auto_ptr vocation; vocation = ps; }

上述赋值语将完成什么工作呢?如果ps 和vocation是常规指针,则两个指针将指向同一个string对象,这是不能被接受的,因为程序将试图删除同一个对象两次,一次是ps 一次是vocation过期的时候。 如何避免此类问题 有几种方法。

1.定义赋值运算符,使之执行深度复制,这两两个指针将指向不同对象。其中一个 是另一个的对象的副本。

2.建立所有权(ownership)概念,对于特定的对象,只能有一个只能指针可以拥有它,这样只有拥有对象的智能指针的构造函数会删除该对象。然后让赋值操作转让所有权,就是用于auto_ptr 和 unique_ptr 的策略,但是 unique_ptr 的策略更严格。

3.创建智能更高的指针,跟踪引用特定对象的智能指针数,这称为引用计数仅当最后一个指针过期是才调用delete 这是shared_ptr的策略。


作者:youandme520



c+ 智能指针 c++11 C++ 指针

需要 登录 后方可回复, 如果你还没有账号请 注册新账号