我想将指针存储在如下所示的双端队列中:

deque<ofImage *> pointerDeque;

void testApp::iTakeAPointer(ofImage * &pointer) {
     cout << "iTakeAPointer  " << &pointer << endl;
     pointerDeque.push_back(pointer);
     cout << "pointerDeque.back() " << pointerDeque.back() << endl;
}


当我运行它时,我得到(在按键上调用函数):

keyPressed 0xbffff240
iTakeAPointer  0xbffff240
pointerDeque.back() 0x9f2e08


因为deque.push_back()创建了一个副本。我的问题是:如何在双端队列中获取引用,在这种情况下为0xbffff240?

编辑:

谢谢。有时,您看不到树木的木头。

最佳答案

您的诊断不正确。这是打印指针的地址,而不是指针持有的地址(这是您想要的):

cout << "iTakeAPointer  " << &pointer << endl;


&pointer的类型为ofImage**。只需使用pointer

cout << "iTakeAPointer  " << pointer << endl;




请注意,在一定情况下,ofImage中包含的pointerDeque实例在其生存期内都存在。如果pointerDeque现在拥有ofImage实例,则考虑使用std::unique_ptr。如果它不拥有它,请考虑使用std::shared_ptr(或boost::shared_ptr)。

关于c++ - C++如何在不复制的情况下将元素存储在双端队列中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11447395/

10-09 05:21