2

可以说我有

struct someStruct
{
    int a;
};

和2个班。

在第一类的方法中,我创建了一个结构实例:

someStruct structName;

现在我想将此结构的地址传递给另一个类的构造函数

std::auto_ptr<2ndClass> 2ndClass_ (new 2ndClass(structName));

我想在这里使用 2ndClass 中更改的结构值 - 请阅读下文...

第二类有:

标题:

...
class 2ndClass...
... 
private:
someStruct &structName2;
public:
__fastcall 2ndClass(someStruct &structName);
...

cp:

__fastcall 2ndClass::2ndClass(someStruct &structName)
    : structName2(structName)
{
...

这显然会复制 structName。

我的问题是:如何从 structName 为 structName2 分配地址,以便我可以读取和写入结构,然后在离开第二类后在第一类中使用这些值?如何在不使用指向结构的指针的情况下做到这一点?

4

1 回答 1

4

这显然会复制 structName。

不,它没有。您通过引用传递,并且您的成员是一个引用,因此2ndClass::structName2将引用您作为参数传递给构造函数的确切对象。

问题是如何从 structName 为 structName2 分配地址,以便我可以读取和写入结构,然后在离开第二类后在第一类中使用这些值。

您不需要这样做,因为您使用的是参考资料。在函数签名中,&代表引用,而不是地址。所以你不传递地址,而是传递对象本身。

请注意,如果原始结构超出范围,您将有一个悬空引用,因此请务必处理这种情况。如果内存没有被覆盖,它似乎可以工作,但这是未定义的行为。

于 2012-07-31T17:36:41.530 回答