O objeto OpenGL na classe C ++ RAII não funciona mais

Eu tenho um objeto OpenGL em uma classe C ++. Como estou empregando RAII, quero que o destruidor o exclua. Então, minha turma se parece com:

class BufferObject
{
private:
  GLuint buff_;

public:
  BufferObject()
  {
    glGenBuffers(1, &buff_);
  }

  ~BufferObject()
  {
    glDeleteBuffers(1, &buff_);
  }

//Other members.
};

Parece que funciona. Porém, sempre que faço uma das seguintes ações, começo a receber vários erros do OpenGL quando o uso:

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.

O que está acontecendo?

Nota: esta é uma tentativa de construir uma resposta canônica para essas perguntas.

questionAnswers(1)

yourAnswerToTheQuestion