unique_ptr<char*>智能指针的智能性及内存回收问题解析
问题
函数f分配若干字节并以unique_ptr<char*>形式返回,该智能指针的“智能”程度如何?当返回的unique_ptr超出作用域时,这些分配的字节会归还给系统吗?
关键提示:此处被管理的对象是指针(
char*),而非它指向的字节!(因此需要数组特化)
答案
不会。
unique_ptr<char*>的管理对象是char*类型的指针本身,而非该指针指向的堆内存字节。当这个智能指针超出作用域时,它只会销毁自己持有的那个指针变量,不会去释放指针指向的堆内存,导致分配的字节无法归还给系统,造成内存泄漏。
正确的做法是使用unique_ptr<char[]>——这是unique_ptr针对数组场景的特化版本,它会在自身销毁时自动调用delete[]来释放指向的数组内存,从而正确归还分配的字节给系统。
内容的提问来源于stack exchange,提问作者ExpertNoob1
相关产品推荐
相关产品推荐

