release函数只是将智能指针赋为null而不释放之前的空间,等于是调用这个函数后直接造成内存泄漏,实在是不明白这个函数存在的意义是啥。难道说是不想新创建一个auto_ptr对象,就想用现有对象去指其他空间,并且还不想释放现在指的空间,现在这个空间给一个普通指针然后调用release把只能指针置为null再去指其他空间,这种做法有什么意义吗?不想释放当前空间一开始不要指它不就好了?
auto_ptr在c++11中被废弃了,另外我猜测,如果一个指针,被两个auto_ptr拥有,那么删除的话,会造成两次删除
建议不要用std::auto_ptr
,因为它已经在C++11中废弃,C++17中被删除。
你可以使用其他智能指针来代替,比如,std::unique_ptr
,std::shared_pointer
,std::weak_ptr
。
https://en.cppreference.com/w/cpp/memory
std::auto_ptr::release()
函数释放对被管理对象的所有权,即auto_ptr
不再负责释放该对象,一般是把release()
的返回值传给另一个负责销毁该对象的智能指针或其他代码。std::auto_ptr
和std::unique_ptr
都有release()
函数,这个函数的存在的意义在于转移一个对象的所有权,比如你要把一个对象的所有权转移到另一个智能指针或其他模块(负责销毁该对象)。
https://en.cppreference.com/w/cpp/memory/auto_ptr