智能指针
智能指针是行为类似于指针的类对象。可以帮助管理动态内存分配。普通指针分配内存后都必须释放内存 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