Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;,有没有一种方法可以使用不复制值的引用创建构造函数?_C++ - Fatal编程技术网

C++ C++;,有没有一种方法可以使用不复制值的引用创建构造函数?

C++ C++;,有没有一种方法可以使用不复制值的引用创建构造函数?,c++,C++,对象\u b\u in_C是通过以下方法之一在C的生命周期的某个点创建的。我希望\u a\u in_C成为与\u a\u in_B相同的对象,这样每当\u a\u in_C更改时,\u a\u in_B也会同时更改 问题是,当创建B的新实例时,\u a\u in\u B会收到\u a\u in\u C的临时副本,这违背了在B中使用引用的目的,并且在构造函数完成工作后,将\u a\u in\u B中充满垃圾。这是一个坏主意,有多种原因。但无论如何,这可以通过使用指向指针的指针来实现: 如果你有什么

对象
\u b\u in_C
是通过以下方法之一在
C
的生命周期的某个点创建的。我希望
\u a\u in_C
成为与
\u a\u in_B
相同的对象,这样每当
\u a\u in_C
更改时,
\u a\u in_B
也会同时更改


问题是,当创建
B
的新实例时,
\u a\u in\u B
会收到
\u a\u in\u C
的临时副本,这违背了在
B
中使用引用的目的,并且在构造函数完成工作后,将
\u a\u in\u B
中充满垃圾。

这是一个坏主意,有多种原因。但无论如何,这可以通过使用指向指针的指针来实现:

如果你有什么地方:

// C.h
class C {
private:
    A _a_in_C;
    B *_b_in_C; 

public:
    ...
}

// B.h
private:
    A& _a_in_B;

public:
    B(A& a): _a_in_B(a) {}
    ...
然后你就这样做了

A* originalObj = new A()

A** pointer1 = &originalObj
A** pointer2 = &originalObj
*(*pointer1)和*(*pointer2)都将反映更改


您必须将此转换为您的情况,但这相对简单。

向我们展示构造函数的调用,发布的代码应该满足您的要求。请创建一个。注意,您应该将
\u b\u in_C
设置为空指针:
b*\u in_C=nullptr,这样您就知道它是否已定义。
originalObj = somethingElse