我在C++类中有一个OpenGL对象。由于我正在使用RAII,因此我想让析构函数将其删除。所以我的班级看起来像这样:C++中的OpenGL对象RAII类不再有效
class BufferObject
{
private:
GLuint buff_;
public:
BufferObject()
{
glGenBuffers(1, &buff_);
}
~BufferObject()
{
glDeleteBuffers(1, &buff_);
}
//Other members.
};
这似乎是行得通的。但是,无论何时我执行以下任何操作,当我使用它时,都会出现各种OpenGL错误:
vector<BufferObject> bufVec;
{
BufferObject some_buffer;
//Initialize some_buffer;
bufVec.push_back(some_buffer);
}
bufVec.back(); //buffer doesn't work.
BufferObject InitBuffer()
{
BufferObject buff;
//Do stuff with `buff`
return buff;
}
auto buff = InitBuffer(); //Returned buffer doesn't work.
发生了什么事?
注意:这是试图为这些问题建立一个规范的答案。