美文网首页
auto_ptr智能指针不智能

auto_ptr智能指针不智能

作者: xiaoliang1 | 来源:发表于2020-06-27 02:57 被阅读0次
class MyException
{
public:
    MyException();
    MyException(int age);
    MyException(const MyException& p);
    ~MyException();
    int age;

private:

};

MyException::MyException()
{

    printf("%s\n", __FUNCSIG__);
}

MyException::MyException(int age)
{
    this->age = age;
    printf("%s\n", __FUNCSIG__);
}

MyException::MyException(const MyException& p)
{

    printf("%s\n", __FUNCSIG__);
}

MyException::~MyException()
{

    printf("%s\n", __FUNCSIG__);
}

今天学习到一个智能指针,我从来么见过:auto_ptr
使用:

void test8() {

    auto_ptr<MyException>p3(new MyException);
}

可以自动释放堆上的创建的出来的第三者对象
这么神奇?内存以后可以自动管理了?不用手动释放了?
其实不然,我又创建了一个在堆上的auto_ptr。居然不会自动释放了。

void test7() {
    auto_ptr<MyException>* p3 = new auto_ptr<MyException>(new MyException);
}

我内心大概知道auto_ptr是怎么自动释放第三者内存了。其实就是内部就是一个指针指向了第三方的堆上的内存。
由于自己在栈上时,函数执行完时会自动调用析构函数,在析构函数调用delete 这个指针即可;
自己在堆上时,函数执行完时不会自动调用析构函数,也就无法释放第三方堆上对象,除非你手动deleteauto_ptr这个对象,这时就变得不那么智能了。


而且这个auto_ptr不能智能取管理栈上的第三方对象。

void test9() {

    MyException p1(10);
    auto_ptr<MyException>p3(&p1);
}

因为p1在结束时会自动释放,轮到auto_ptr释放时,其内部指针再去delete这快内存时就会崩溃


即使是C++11的unique_ptr也存在同样的问题


看完这个分析之后,估计你也可以手写一个智能指针了

相关文章

  • c++智能指针用法

    智能指针是什么 智能指针是c++中有四个智能指针:auto_ptr、shared_ptr、weak_ptr、uni...

  • c++11 智能指针

    智能指针介绍 C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, wea...

  • 16/3

    1.智能指针类分类 auto_ptr(摒弃不建议使用) unique_ptr shared_ptr 如图三个指针定...

  • 阿里巴巴面试题基础篇 C++基础篇(二)

    ● 请你来说一下C++中的智能指针参考回答:C++里面的四个智能指针: auto_ptr, shared_ptr,...

  • C++ 11 常用特性的使用经验总结(二)

    4、智能指针内存管理 在内存管理方面,C++11的std::auto_ptr基础上,移植了boost库中的智能指针...

  • modern c++(5)-智能指针

    auto_ptr与unique_ptr auto_ptr与unique_ptr都是独占所有权的智能指针类型,前者由...

  • 面试——C++智能指针

    STL中的智能指针:auto_ptr(deprecated),unique_ptr,shared_ptr,weak...

  • auto_ptr智能指针不智能

    今天学习到一个智能指针,我从来么见过:auto_ptr;使用: 可以自动释放堆上的创建的出来的第三者对象这么神奇?...

  • 智能指针

    C++里面的智能指针包括auto_ptr, shared_ptr, unique_ptr, weak_ptr四种。...

  • C++11智能指针

    C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其...

网友评论

      本文标题:auto_ptr智能指针不智能

      本文链接:https://www.haomeiwen.com/subject/biapfktx.html