C ++对外部类内部的内部类的引用

平克·弗洛伊德(乐队名

仅出于好奇,是否可以在外部类中声明对内部类的引用:

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而不是指针来保证Bin中的存在A。)

编辑

当我有一个疑问,为什么要这样做时,这就是我的目标。让我们想象一下,其中class B包含大量数据并需要大量内存。我不想有很多B副本,否则我将用光内存。现在我有两个类CD并且都继承自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);
}

但不会编译。

卡伯索诺(KABoissonneault)

如果要在复制成员之间共享对象,请使用std :: shared_ptr。这是确保B对象对于使用它的所有A对象永久存在的唯一标准方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章