被重复释放坑了
对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。所有智能指针都重载了“operator->”操作符,直接返回对象的引用,用以操作对象。访问智能指针原来的方法则使用“.”操作符。
问题重现:
std::shared_ptr<string>str1(new string("sdfsdfsgsd"));
std::shared_ptr<string>str2;
str2.reset((string*)str1.get());
当str1和str2释放时,会对new出来的string进行delete两次。