将shared_ptr传递给OpenGL?

时间:2012-12-10 03:26:34

标签: c++ c++11

如果我的代码通常具有以下功能:

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

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

编辑:我注意到函数正在写入字符串而不是读取。您需要先调整std :: string的大小,然后再调整the pointer returned by c_str isnt meant for writing。 std :: shared_ptr应该可以工作。