[英]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;
&pointer
是ofImage**
類型的。 只需使用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.