相关疑难解决方法(0)

对于带有数组的unique_ptr有什么用处吗?

std::unique_ptr 支持数组,例如:

std::unique_ptr<int[]> p(new int[10]);
Run Code Online (Sandbox Code Playgroud)

但它需要吗?可能使用std::vector或更方便std::array.

你觉得这个结构有用吗?

c++ smart-pointers c++11

219
推荐指数
12
解决办法
13万
查看次数

创建包含已分配数组的unique_ptr的正确方法

创建包含在免费商店中分配的数组的unique_ptr的正确方法是什么?Visual Studio 2013默认支持这个,但是当我在Ubuntu上使用gcc版本4.8.1时,我得到了内存泄漏和未定义的行为.

使用此代码可以重现此问题:

#include <memory>
#include <string.h>

using namespace std;

int main()
{
    unique_ptr<unsigned char> testData(new unsigned char[16000]());

    memset(testData.get(),0x12,0);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Valgrind将给出这个输出:

==3894== 1 errors in context 1 of 1:
==3894== Mismatched free() / delete / delete []
==3894==    at 0x4C2BADC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==3894==    by 0x400AEF: std::default_delete<unsigned char>::operator()(unsigned char*) const (unique_ptr.h:67)
==3894==    by 0x4009D0: std::unique_ptr<unsigned char, std::default_delete<unsigned char> >::~unique_ptr() (unique_ptr.h:184)
==3894==    by 0x4007A9: main (test.cpp:19)
==3894==  Address 0x5a1a040 is 0 bytes inside a block of size …
Run Code Online (Sandbox Code Playgroud)

c++ linux gcc unique-ptr c++11

54
推荐指数
3
解决办法
6万
查看次数

标签 统计

c++ ×2

c++11 ×2

gcc ×1

linux ×1

smart-pointers ×1

unique-ptr ×1