shared_ptr 数组释放问题

C++语言 码拜 9年前 (2016-05-17) 1189次浏览
vs2013,如下代码,std::shared_ptr<wchar_t> pPath(new wchar_t[size]);跟踪发现销毁的时候是调用的是 delete不是delete [],

virtual void _Destroy()
		{	// destroy managed resource
		delete _Ptr;
		}

测试了下delete 和delete[]都能把new的内存块释放掉

while (1)
	{
		int size = 1024 * 1024;
		std::shared_ptr<wchar_t> pPath(new wchar_t[size]);
		Sleep(0);
	}

一直运行以上代码内存竟然没有增长。跟踪发现销毁的时候调用的delete代码是

void operator delete( void * p )
{
    RTCCALLBACK(_RTC_Free_hook, (p, 0));
    free( p );
}

这是神马个情况?

解决方案

10

shared_ptr 管理数组需要加自定义删除操作,例如这样,否则导致未定义行为。

std::shared_ptr<int> sp( new int[10], []( int *p ) { delete[] p; } );

主楼里 wchar_t 是内建类型,所以 delete 和 delete[] 看着好像没区别,要是具有析构函数的类型就有区别了。
另外,std 里没有 shared_array。

10

可以本人定义 回收函数

10

引用:
Quote: 引用:
Quote: 引用:

数组用shared_array,而不是shared_ptr.

支持。

标准库里有shared_array?

没有,不过有提案增加 shared_ptr 对数组的特化,相当于 shared_array 了,处理手法和 unique_ptr 对数组有特化一样。

10

用std::array多好

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明shared_ptr 数组释放问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)