我想将指针存储在如下所示的双端队列中: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/