【发布时间】:2016-07-15 04:48:09
【问题描述】:
我有一个向量,它包含从基类“SceneObject”派生的类的对象。对于这个任务,我发现我必须使用唯一指针,如下所示:
vector<std::unique_ptr<SceneObject>> objects;
为了将我的对象放入这个向量中,我使用 new 关键字在堆上分配内存:
objects.emplace_back(new Sphere(glm::vec3(0.9, -1.925, -6.69), 0.825, sphereMaterial));
我在循环中从这些对象访问函数,例如:
objects[k]->intersect(...);
但我的问题是我想初始化一个变量“SceneObject”,该变量将包含存储在此向量中的对象之一,以便稍后执行一些检查......我正在尝试存储指针,因为我认为我应该这样做,但是这样做时出现编译器错误:
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];
^
我使用this example code 中看到的这种方法来创建我的基类/派生类。
关于我应该如何用我的对象初始化这个变量有什么建议吗?
【问题讨论】:
-
为什么不使用
std::shared_ptr?
标签: c++ pointers unique-ptr