我最近使用这种语法作为指针:
std::vector<Shader *>* _shaderArray;
问题是我开始出现内存泄漏错误。所以现在我决定使用unique_pointers,所以我不再需要担心这个问题。但据我所知,c ++ 11语法中的上述语法是:
std::unique_ptr<std::vector<std::unique_ptr<Shader>>> _shaderArray;
如果这是正确的,我该如何初始化它?这段代码给了我错误:
_shaderArray = new std::vector<Shader *>( );
答案 0 :(得分:2)
在声明
处初始化unique_ptr
std::unique_ptr<std::vector<std::unique_ptr<Shader>>> _shaderArray{new std::vector<std::unique_ptr<Shader>>( )};
完整(可编辑)最小例子:
#include <vector>
#include <memory>
class Shader{};
int main()
{
std::unique_ptr<std::vector<std::unique_ptr<Shader>>> _shaderArray{new std::vector<std::unique_ptr<Shader>>( )};
}
答案 1 :(得分:1)
在您的具体情况下,我建议使用typedef
或using
别名来简化这个非常长的陈述:
using ShaderPtrVec = std::vector<std::unique_ptr<Shader>>;
using ShaderPtrVecPtr = std::unique_ptr<ShaderPtrVec>;
然后,使用它变得更加清晰:
ShaderPtrVecPtr shaderArray( new ShaderPtrVec( ) );
或者,如果您碰巧已经声明了唯一指针但需要重新分配其内容,则可以使用reset
:
shaderArray.reset( new ShaderPtrVec( ) );