0

我想将指针存储在如下所示的双端队列中:

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?

编辑:

谢谢。有时你只见树木不见森林。

4

3 回答 3

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

于 2012-07-12T08:00:16.893 回答
1
cout << "iTakeAPointer" << 指针 << endl;

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

于 2012-07-12T07:59:21.590 回答
0
void testApp::iTakeAPointer(ofImage * &pointer) {

改成

void testApp::iTakeAPointer(ofImage * pointer) { // remove ref
于 2012-07-12T08:00:06.363 回答