2012-07-12 47 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