【问题标题】:The same instance in different classes C++不同类 C++ 中的相同实例
【发布时间】:2017-05-08 17:15:16
【问题描述】:

test.h:

class A
{
public:
    A();
    ~A();

};

class B
{
public:
    B();
    ~B();

};

class C
{
public:
    C();
    ~C();

};

test.cpp:

#include "test.h"

A::A()
{
    C c1;
}
A::~A()
{

}


B::B()
{
    //Here, too, must be "c1"
}
B::~B()
{

}

C::C()
{

}
C::~C()
{

}

如何从 B 类访问 C 类的实例?

  1. 我读过一些关于作文的内容,但不明白它是什么。
  2. 复制不起作用,因为 C 类存储某些不断变化的数据。我需要将它们从 A 类和 B 类更改。
  3. 单例也不适合

谢谢!

【问题讨论】:

  • 将其作为引用或指针传递?
  • 你知道类和类实例的区别吗?
  • AB(或两者)应该存储对 C 的引用。例如B::B(C& c) : c1(c) {}
  • 你需要一个指针。甚至可能是shared pointer
  • 类的声明在哪里?否则我将不得不求助于星星?

标签: c++ class reference instance


【解决方案1】:

在您的代码中,没有可以共享的 C 类的任何对象;你定义的类C的唯一实例是A的构造函数中的一个局部变量,并且这个对象不能被其他人访问(并且一旦这个构造函数完成就会被销毁)。

一种简单的方法是定义一个C 类型的全局变量并在其他翻译单元(或同一单元)中使用它:

// c.h
class C
{   public:
    C(int val) : someVal(val) {};
    int someVal;
};
extern C c1; // declare c1

// c.cpp: 
C c1(0);  // define c1 once in the program

// a.cpp
#include "c.h" // import the declaration of c1 (will not redefine it!)
A::A() {
    c1.someVal = 5;
}

// b.cpp
#include "c.h"
B::B() {
    c1.someVal = 10;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2013-11-13
    • 2013-09-12
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    相关资源
    最近更新 更多