我有两个班,我们姑且称之为A和B类方法的新指针必须被铸造成一个参考
class A:
{
public:
//Some functions
A *getNewA() const;
private:
//some attributes
}
class B:
{
public:
//Some functions
private:
A &reftoA;
}
在主代码,我必须产生一个新的A感谢A :: getNewA()方法。这必须去B :: reftoA,写在B级
这里是A :: getNewA()方法:
A *A::getNewA()
{
A *newA = new A;
return newA;
}
确定。所以,现在我打电话getNewA和要存储reftoA的结果,这是一个参考到A在B的功能(这需要参照A作为参数)
B::foo(A ¶mA)
{
reftoA = *(paramA.getNewA());
}
我想这应该是工作,但它不会。 因为当解引用时,reftoA将总是接受这个对象而不是新分配的对象。
让我们更加清晰,让我们修改函数输出结果
A * A::getNewA()
{
A *newA = new A;
std::cout << "New pointer " << newA << std::endl;
std::cout << "this pointer" << this << std::endl;
return A;
}
void B::foo(A ¶mA)
{
reftoA = *(paramA.getNewA());
std::cout << "new generated pointer " << &reftoA << std::endl;
}
这里是一个输出:
New pointer : 004FFAEC
this pointer: 0069D888
New generated pointer : 0069D888 //Expected : 004FFAEC
我不能让这个“新产生的指针”是与A :: getNewA()在分配内存之后返回的新指针相同。当然,我想有一点与解引用指针将其存储在引用中有一定的意义。 我知道引用与现有的对象一起使用。也许新的对象A :: getNewA()应该分配内存不会像我期望的那样工作。
我可以使用指针B中代替参考:: foo的(),我知道,但我不能
我想我误解的东西约refrence和指针,但我不知道什么。
任何帮助,不胜感激
等等,什么? '返回A'?这是如何构建的?你能否请尝试创建一个[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)向我们展示? –
另外,你有内存泄漏。你放弃'getNewA'返回的指针(当然,假设你实际返回'newA'),所以你真的没有什么可以“删除”的。 –
最后,您的问题的可能来源:*您不能重新分配参考*。你正在做的是将*分配给*对象*。你真的在做'reftoA.operator =(*(paramA。getNewA()))' –