5

如果我有通常会像这样运行的代码:

char* log = new char[logLength];
glGetProgramInfoLog(..., ..., log) 
//Print Log
delete [] log;

如何使用 C++11 智能指针获得相同的结果?谁知道在我有机会删除那段记忆之前会发生什么。

所以我想我需要向下转换为 C 风格的指针?

4

2 回答 2

5

如果您的代码在您的代码段中看起来确实如此,shared_ptr那么对于这种情况来说有点过头了,因为看起来您不需要分配内存的共享所有权。unique_ptr对数组有部分专业化,非常适合此类用例。delete[]当它超出范围时,它将调用托管指针。

{
  std::unique_ptr<char[]> log( new char[logLength] );
  glGetProgramInfoLog(..., ..., log.get());
  //Print Log
} // allocated memory is released since log went out of scope
于 2012-12-10T04:16:46.613 回答
3

std::shared_ptr有一个方法get,您可以使用它来获取指向变量的 C 样式指针。如果该指针指向 a std::string,则需要进一步调用该c_str()函数以获取指向 C 样式字符串的指针。

编辑:我注意到该函数正在写入字符串而不是读取。您需要先调整 std::string 的大小,即使在那之后,c_str 返回的指针也不是用于写入的。std::shared_ptr 应该可以工作。

于 2012-12-10T03:29:49.137 回答