仅出于好奇,是否可以在外部类中声明对内部类的引用:
class A{
private:
class B{
public:
B(double val):val_(val){}
private:
double val_;
};
public:
A(double val):b(B(val)){} /*problem*/
private:
B& b;
};
int main(){
A a(1.0);
}
逻辑上这是不可能的,因为我看不到如何分配对临时变量的引用。但我想确定。(我想使用ref而不是指针来保证B
in中的存在A
。)
当我有一个疑问,为什么要这样做时,这就是我的目标。让我们想象一下,其中class B
包含大量数据并需要大量内存。我不想有很多B副本,否则我将用光内存。现在我有两个类C
,D
并且都继承自A
。我希望它们与的相同实例相关B
。我可以使用指针来做到这一点,但是正如我之前所说,我想确保至少B
某个地方存在a ,因此我可以通过使用ref来确保这一点。我也想B
成为一个内部类,这样我就不会污染我的代码。感谢您的帮助,我现在使用一个右值引用,我的代码如下所示:
class A{
class B{
public:
B(double val):val_(val){}
private:
double val_;
};
public:
A(double val):b(B(val)){}
A(A const& a):b(a.b){}/*new problem*/
protected:
B&& b;
};
class C: public A{
public:
C(A const& a):A(a){}
};
class D: public A{
public:
D(A const& a):A(a){}
};
int main(){
A a(1.0);
C c(a);
D d(a);
}
但不会编译。
如果要在复制成员之间共享对象,请使用std :: shared_ptr。这是确保B对象对于使用它的所有A对象永久存在的唯一标准方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句