我有一个向量来存放派生于基类“SceneObject”的类的对象。对于这个任务,我发现我不得不使用独特的指针,如下所示:从一个持有派生类的向量初始化一个变量到一个对象
objects.emplace_back(new Sphere(glm::vec3(0.9, -1.925, -6.69), 0.825, sphereMaterial));
:
vector<std::unique_ptr<SceneObject>> objects;
把我的物品这个载体里面,我在与新关键字堆中分配内存
我访问这些对象的功能,在一个循环中,如:
objects[k]->intersect(...);
但我的问题是,我想初始化变量“场景对象”,将CONTA在存储在这个向量中的一个对象稍后执行一些检查......我试图存储指针,因为我认为我应该这样做,但是在执行此操作时出现编译器错误:
SceneObject* object = NULL;
for(...)
object = &objects[k];
错误:
boilerplate.cpp: In function 'int main(int, char**)':
boilerplate.cpp:606:15: error: cannot convert '__gnu_cxx::__alloc_traits<std::allocator<std::unique_ptr<SceneObject> > >::value_type* {aka std::unique_ptr<SceneObject>*}' to 'SceneObject*' in assignment
object = &objects[k];
^
我使用这种方法作为创建我的碱/派生类在看出。
任何有关如何使用我的对象初始化此变量的建议?
为什么不使用'std :: shared_ptr'? – wally