【发布时间】:2016-03-23 05:40:34
【问题描述】:
我需要一个指向一些预先存在的对象的指针向量,所以我想直接在向量内创建一个指针。 我想调用我的向量的 emplace_back 函数,将 new 作为参数传递,但这不仅会创建我想要的指针,还会创建一个对象。为了摆脱这种不希望的附带效果,我会做一个 delete 指针,它实际上删除对象并将指针留在那里,然后我会将此指针设置为指向我想要的预先存在的对象.在代码中,它类似于:
std::vector myVector<ClassType*>;
myVector.emplace_back(new ClassType());
delete myVector.end();
myVector.end()=&preexistingObject;
但是,我认为创建一个对象只是因为我想要一个指针而立即删除它是一种浪费!
如何在不创建对象的情况下创建指针,而我可以从参数列表中(在本例中为 emplace_back 中)创建它?
我会写
ClassType *myPointer;
但问题是我无法根据需要从 emplace_back 函数内部执行此操作。
有什么建议吗?
感谢您的帮助,
古斯塔沃
【问题讨论】:
-
首先,您发布的代码无法编译。其次,你的计划注定要失败。
myVector.end()返回向量之外的值。不建议deleteing 和分配给它。emplace_back为您构建。因为它要做的只是构造一个指向ClassType的指针,所以它对你没有多大作用。使用push_back完成这项工作。 -
感谢您的回推提示。以及如何在不从内部推回创建对象的情况下创建指针?
-
没有连接对象的指针总是
NULL- 但也不鼓励这样做。 -
如我所说,之后我会立即指向正确的指针。所以,这不是问题
-
基本原理是可以在不指向任何地方或创建任何对象的情况下制作指针。默认情况下,指针在初始化之前不会指向任何有用(或安全使用)的地方。我不知道您预先存在的对象是如何存储的。这就是为什么我没有发布答案。它可以像
ClassType preexisting; myVector.push_back(&preexisting);或ClassType * preexisting = new ClassType(); myVector.push_back(preexisting);一样简单,但我能做的最好的就是猜测。
标签: c++ pointers object vector containers