私はOpenGLオブジェクトをC++クラスに持っています。私はRAIIを採用しているので、デストラクタにそれを削除させたい。ですから、私のクラスは次のようになります:C++ RAIIクラスのOpenGLオブジェクトは動作しなくなった
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.
何が起こっているのですか?
注:これは、これらの質問に対する正式な回答を作成するための試みです。