(这里有三个相关的问题)
我在 C++ 中遇到的最讨厌的事情之一是意外地传递/复制了一个对象,然后想知道为什么它的状态不是你所期望的。我最近遇到了一种情况,我通过指针传递,但我没有得到我期望的状态,结果我不得不通过引用传递指针,这真的让我很震惊!
鉴于这种情况,我可以确认一下吗:
MyClass x;
AnotherClass y;
y.passMyObjectSomewhere(x);
.
.
.
.
//Later on x is changed and I wish to see this change in y
x.modifyMyObject();
我有以下技术可用于保持x
更新状态y
:
MyClass* x = new MyClass();
y.passMyObjectSomewhere(x);
.
.
.
delete x;
或者
MyClass x;
y.passMyObjectSomewhere(&x);
或者
shared_ptr<MyClass> x(new MyClass());
y.passMyObjectSomewhere(x);
1)如果我对x
?y
x
y
2) 如果 x 是向量或另一个 STL 集合的对象,上述情况会改变吗?还是同样的规则适用?
3)构造函数中的指针分配给数据成员的类呢:
class X{
public:
X(Something* x);
private:
Something* x;
}
X::X(Something* &y){
x = y;
}
y
必须在这里通过引用传递,否则会分配指针的副本?我问这个是因为我在这里问了另一个 SO 问题: