簡體   English   中英

C ++如何在不復制的情況下將元素存儲在雙端隊列中

[英]C++ How to store element in deque without copying

我想將指針存儲在如下所示的雙端隊列中:

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;

&pointerofImage**類型的。 只需使用pointer

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

注意,在一定情況下, ofImage包含的ofImage實例pointerDeque存在。 如果pointerDeque現在擁有ofImage實例,則考慮使用std::unique_ptr 如果它不擁有它,請考慮使用std::shared_ptr (或boost::shared_ptr )。

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

打印指針本身,而不是其地址!

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

改成

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM