我想在一个看起来像这样的双端队列中存储指针:
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()创建了一个副本。我的问题是:如何在deque中获取引用,在本例中为0xbffff240?
编辑:
感谢。有时你看不到树木。
答案 0 :(得分:4)
您的诊断不正确。这是打印指针的地址,而不是指针所在的地址(这是你想要的):
cout << "iTakeAPointer " << &pointer << endl;
&pointer
的类型为ofImage**
。只需使用pointer
:
cout << "iTakeAPointer " << pointer << endl;
注意,必须是ofImage
中包含的pointerDeque
个实例在其生命周期内存在的情况。如果pointerDeque
现在拥有ofImage
个实例,请考虑使用std::unique_ptr
。如果它不拥有它,请考虑使用std::shared_ptr
(或boost::shared_ptr
)。
答案 1 :(得分:1)
cout << "iTakeAPointer " << pointer << endl;
打印指针本身,而不是它的地址!
答案 2 :(得分:0)
void testApp::iTakeAPointer(ofImage * &pointer) {
更改为
void testApp::iTakeAPointer(ofImage * pointer) { // remove ref