для создания оболочек RAII только для перемещения для объектов OpenGL.

я есть объект OpenGL в классе C ++. Поскольку я использую 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.

В чем дело?

Примечание: это попытка построить канонический ответ на эти вопросы.

Ответы на вопрос(1)

Ваш ответ на вопрос