我只问这个问题,因为我已经将它隔离到了三行代码中,所以很明显我只是搞砸了,因为我没有经验:
Movie* ptr;
if(title == r->getItem().getTitle())
{
ptr = &(r->getItem());
cout << "Found: " << ptr->getTitle() << "!";
}
基本上最新的是title == "The Godfather"
所以因此,r->getItem().getTitle()
正在返回。但我不明白的是,当我尝试制作指向Movie
返回的r.getItem()
对象的指针时,我无法使用指针。肯定有某些分配给它,但是当我尝试ptr->getTitle()
时它返回null。
到底是怎么回事?
答案 0 :(得分:1)
我认为你正在做这样的事情
Movie& getItem () {
Movie m ();
return m;
}
/* ... */
Movie * p = & (getItem ());
问题是m是一个堆栈对象,在getItem返回后会丢失。这是C ++中常见的错误。
getTitle调用也不应该有效,但可能是偶然的。
您必须在堆上创建对象。
我避免这样做的简单规则:不要使用&amp;除非你没有考虑过你十次做什么,否则完全是操作员。
答案 1 :(得分:0)
您应该发布更多代码。但很可能getItem
会返回一个按值的对象,即它返回一个临时对象,该对象是原始对象的副本。在赋值之后 - 这个临时对象被销毁,所以你的ptr
指向一个被破坏的对象,(可能)无法访问的图像。
答案 2 :(得分:0)
这里可能会发生很多事情: