相关疑难解决方法(0)

应该允许std :: unique_ptr <void>

这是一个非常简单的问题.请考虑以下代码:

#include <iostream>
#include <memory>

typedef std::unique_ptr<void> UniqueVoidPtr;

int main() {
    UniqueVoidPtr p(new int);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用以下命令使用cygwin(g ++ 4.5.3)进行编译g++ -std=c++0x -o prog file.cpp就可以了.但是,使用Microsoft编译器(VS 2010或2013)进行编译时出现此错误:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\memory(2067) : error C2070: 'void': illegal sizeof operand
        C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\memory(2066) : while compiling class template member function 'void std::default_delete<_Ty>::operator ()(_Ty *) const'
        with
        [
            _Ty=void
        ]
        C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\type_traits(650) : see reference to class template instantiation 'std::default_delete<_Ty>' being compiled
        with
        [ …
Run Code Online (Sandbox Code Playgroud)

c++ gcc visual-studio-2010 unique-ptr c++11

24
推荐指数
3
解决办法
9187
查看次数

C++ RAII类中的OpenGL对象不再有效

我在C++类中有一个OpenGL对象.由于我正在使用RAII,我想让析构函数删除它.所以我的班级看起来像:

class BufferObject
{
private:
  GLuint buff_;

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

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

//Other members.
};
Run Code Online (Sandbox Code Playgroud)

这看起来很有效.但是当我执行以下任何操作时,我在使用它时会开始出现各种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.
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

注意:这是尝试建立这些问题的规范答案.

c++ opengl c++11

20
推荐指数
1
解决办法
721
查看次数

标签 统计

c++ ×2

c++11 ×2

gcc ×1

opengl ×1

unique-ptr ×1

visual-studio-2010 ×1