2012-07-12 32 views
0

我想存储指针的双端队列,看起来像这样:C++如何存储在双端队列元素而不复制

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)?

编辑:

谢谢。有时你看不到树木。

回答

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

打印指针本身,而不是它的地址!

0
void testApp::iTakeAPointer(ofImage * &pointer) { 

变化

void testApp::iTakeAPointer(ofImage * pointer) { // remove ref 
4

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

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

&pointerofImage**类型。只需使用pointer

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

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

+0

谢谢。图像实例在其整个生命周期中都存在。无论如何,我会研究std :: shared_ptr。 – ilsa 2012-07-12 08:23:23