让我说我有
struct someStruct
{
int a;
};
和2个班。
在第一类的方法中,我创建了一个结构实例:
someStruct structName;
现在我想将此结构的地址传递给另一个类的构造函数
std::auto_ptr<2ndClass> 2ndClass_ (new 2ndClass(structName));
我想在这里使用在2ndClass中更改的struct值 - 请阅读下面的内容......
第二节课有:
头:
...
class 2ndClass...
...
private:
someStruct &structName2;
public:
__fastcall 2ndClass(someStruct &structName);
...
CPP:
__fastcall 2ndClass::2ndClass(someStruct &structName)
: structName2(structName)
{
...
这显然是一个structName的副本。
我的问题是:如何从structName为structName2分配一个地址,以便我可以读取和写入结构,然后在离开第二个类后在第一个类中使用这些值?如果不使用指向结构的指针,我怎么能这样做?
答案 0 :(得分:4)
这个obvoiusly制作了structName的副本。
不,不。您通过引用传递,并且您的成员是引用,因此2ndClass::structName2
将引用您作为参数传递给构造函数的确切对象。
问题是如何从structName为structName2分配地址,这样我就可以读取和写入结构,然后在离开第二个类后在第一个类中使用这些值。
您不需要,因为您使用引用。在函数签名中,&
代表引用,而不是地址。所以你不传递地址,而是传递对象本身。
注意如果原始结构超出范围,您将有一个悬空引用,因此请务必处理该情况。如果内存没有被覆盖,它似乎可以工作,但它是未定义的行为。