如何在不从参数列表内部创建对象的情况下创建指针
How to create a pointer without creating an object from inside a parameter list
我需要一个指向一些预先存在的对象的指针向量,所以我想直接在向量中创建一个指针。
我想调用我的向量的 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 函数内部执行此操作。
有什么建议吗?
感谢您的帮助,
古斯塔沃
答案是按照 user4581301 的建议将预先存在的对象的地址传递到我的容器。
唯一棘手的一点是我的软件有时会崩溃,我已经跟踪它是指向 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()));
谢谢!
古斯塔沃
我需要一个指向一些预先存在的对象的指针向量,所以我想直接在向量中创建一个指针。 我想调用我的向量的 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 函数内部执行此操作。
有什么建议吗?
感谢您的帮助,
古斯塔沃
答案是按照 user4581301 的建议将预先存在的对象的地址传递到我的容器。
唯一棘手的一点是我的软件有时会崩溃,我已经跟踪它是指向 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()));
谢谢! 古斯塔沃