当函数需要一个char*时,你能传递一个shared_ptr吗?
我正在读入一个完整的文本文件(长度为100),并希望将char存储到char[]数组中。我使用的天真方法是这样的:
ifstream dictFile(fileName);
size_t fileLength = 100;
char* readInBuffer(new char[fileLength]);
dictFile.read(readInBuffer, fileLength);
//processing readInBuffuer..............
delete[] readInBuffer;
dictFile.close();
如果在 delete[] 语句之前抛出异常,就会出现内存泄漏。我想知道是否可以使用 shared_ptr readInBuffer(new char[fileLength]); 但是函数原型 read(char* s, streamsize n) 不接受智能指针作为输入?有什么技巧吗?
编辑:我正在尝试编写类似于以下内容的代码:
shared_ptr<char[]> readInBuffer(new char[fileLength]);
dictFile.read(readInBuffer.get(), fileLength);
但是它无法编译。
get()
方法,但是智能指针有,并且它正好可以做到你所要求的。 - Mark Ransomshared_ptr
不足以智能地管理数组。然而,如果你给它一个自定义的删除器,一个unique_ptr
就可以做到。 - Pete Becker