【发布时间】:2012-11-15 19:55:56
【问题描述】:
当函数需要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]); 但是函数原型
读取 (char* s, 流大小 n)
不接受智能指针作为输入?有什么技巧吗?
编辑:我正在尝试写这样的东西:
shared_ptr<char[]> readInBuffer(new char[fileLength]);
dictFile.read(readInBuffer.get(), fileLength);
但它不会编译。
【问题讨论】:
-
您的问题中已经有了部分答案 - 常规指针没有
get()方法,但智能指针有,而且它完全符合您的要求。跨度> -
shared_ptr不够聪明,无法管理阵列。但是,unique_ptr是,如果你给它一个自定义删除器。
标签: c++ function pointers smart-pointers