shared_ptr原始指针参数



当函数需要char*时,可以传入shared_ptr吗?

我正在读取整个文本文件(长度 = 100),并希望将字符存储到 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]);但功能原型

读取 ( 字符* s, 流大小 n )

不接受智能指针作为输入?有什么技巧吗?

编辑:我正在尝试写这样的东西:

shared_ptr<char[]> readInBuffer(new char[fileLength]);
dictFile.read(readInBuffer.get(), fileLength);

但它不会编译。

您可以改用向量,而不是使用指针。

std::vector<char> readInBuffer(fileLength);
dictFile.read(&readInBuffer[0], fileLength);

大警告:创建一个指向数组的std::shared_ptr<char>会引起未定义的行为,因为智能指针将delete指针,而不是delete[]指针。请改用std::shared_ptr<char[]>

将其留在这里,因为它可能是一个有用的警告。原答案如下...

get()函数返回基础原始指针。你已经在代码中写了这个!

shared_ptr<char[]> readInBuffer(new char[fileLength]);
dictFile.read(readInBuffer.get(), fileLength);

使用&*readInBuffer可以实现相同的结果。

当然,你必须确定dictFile.read()不会delete指针,否则恶魔可能会从你的鼻子里飞出来。

不,你不能通过shared_ptr.但是您可以创建一个,并调用其 get() 成员函数以获取要传递给该函数的原始指针的副本。但是,shared_ptr不处理数组;这就是vector的目的。但是您可以使用数组unique_ptr来管理该对象:

std::unique_ptr<char[], std::default_delete<char[]> ptr(new char[whatever]);
f(ptr.get());

写第一行可能有一个更短的方法,但我没有时间把它挖出来。

相关内容

  • 没有找到相关文章

最新更新