c++ - 我需要一些 C++ 结构建议

标签 c++ pointers

我有一个类 A 的实例。它有两个成员,对象 A 和对象 B。我需要创建对象 A 的一个实例(这是一个相当大的对象)和对象 B 的两个实例,然后给出对象 B 的两个实例都可以访问该对象 A。他们不需要更改对象 A,他们只需要访问其信息。

现在,我通过将对象 A 创建为指针并将其传递给对象 B 的两个实例来实现这一切,对象 B 拥有自己的指针,然后指向内存中与对象 A 的指针相同的位置。这很好用,但我认为这是一个很大的禁忌,对吧?因为一旦 A 类删除了原始指针,我就会有一些悬挂指针,对吗?有一个更好的方法吗?

(仅供引用 - 在我需要快速加载时间的程序中一次加载对象 A 需要几秒钟,这就是为什么我必须只创建一个实例并将其传递给两个对象 B 而不是让对象 B创建他们自己的对象 A 实例。)

最佳答案

如果我没听错,你想要这样的东西:

// Class for "Object A" in your question
class Foo
{
    // ...
};

// Class for "Object B" in your question
class Bar
{
    Foo &foo_;

public:
    Bar(Foo &foo)
        : foo_(foo)
        {}
};

class A
{
    Foo foo_;
    Bar bar1_;
    Bar bar2_;

public:
    A()
        : bar1_(foo_),
          bar2_(foo_)
        {}
};

不使用指针,不分配,所以没有悬挂指针/引用或内存泄漏。当 A 被销毁时,bar1_bar2_ 以及 foo_ 也会被销毁,因此 的两个实例Bar 也不会留下任何悬空引用。

关于c++ - 我需要一些 C++ 结构建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12249209/

相关文章:

c# - 我能否将 System.Object 编码为指向 C 的不可访问指针,然后返回到 C#?

c - 如何指向一个对象而不在删除时影响它?

c - 指针和双指针练习

c++ - 指向列表的 .end() 的 int 指针

c++ - 以编程方式从节能或屏幕保护程序中唤醒操作系统

c++ - 被管道弄糊涂了。 'cat -A' 似乎过滤掉了部分输出

c++ - 通过C++中的变量访问结构中的成员

c++ - undefined symbol : Symbol referencing errors. 没有输出写入 main

c++ - 如何更改 CMFCToolBar 运行时

c - C 中 scanf 函数中的字符数组指针没有 & 符号