C ++如何在deque中存储元素而不进行复制

时间:2012-07-12 07:57:41

标签: c++ pointers deque

我想在一个看起来像这样的双端队列中存储指针:

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?

编辑:

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

3 个答案:

答案 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