我需要一个指向一些预先存在的对象的指针向量,所以我想直接在向量内创建一个指针。 我想调用我的向量的emplace_back函数传递 new 作为参数,但这不仅会创建我想要的指针,还会创建一个对象。为了摆脱这种不受欢迎的附带效应,我会做一个删除指针,实际删除对象并将指针留在那里,然后我将此指针设置为指向我想要的预先存在的对象。在代码中,它将类似于:
std::vector myVector<ClassType*>;
myVector.emplace_back(new ClassType());
delete myVector.end();
myVector.end()=&preexistingObject;
然而,我认为创建一个对象只是因为我想要一个指针而立即删除它是一种浪费!
如何在不创建对象的情况下创建指针,我可以从参数列表中创建它(在这种情况下在emplace_back内部)?
我可以写
ClassType *myPointer;
但问题是我无法在emplace_back函数内部执行此操作。
有什么建议吗?
感谢您的帮助,
古斯塔沃
答案 0 :(得分:0)
答案是将预先存在的对象的地址传递给我的容器,如用户4581301所建议的那样。
唯一棘手的问题是我的软件有时会崩溃,我跟踪它是一个指向gargabe指针的问题。
这是因为我预先存在的对象存储在向量(std :: vector)中,当我的向量太大时,我的所有指针都会无效,因为...向量改变了它的内存地址当必须为更多物品腾出空间时的内容!
解决方案是将预先存在的对象存储在列表(std :: list)中,这保证了当列表变得太大时,我的预先存在的对象不会更改其地址。
要在代码中恢复我必须拥有的内容:
std::list<PreExistingClass> myContainerOfObjects; //This HAS to be a list. Otherwise, dangling pointers!
std::vector<PreExistingClass*> myContainerOfPointerToObjects
myContainerOfObjects.emplace_back();
myContainerOfPointerToObjects.emplace_back(&(myContainerOfObjects.back()));
谢谢! 古斯塔沃