C ++在多个对象实例之间共享一个变量
C++ sharing one variable among more instances of object
有什么方法可以让我在另一个 class 的更多实例上共享一个变量(class 的对象)?静态成员不是我要找的。我知道一个变量(大对象)将在更多实例(但不是所有实例)之间共享。我怎样才能在 C++ 中做到这一点?感谢您的帮助。
示例:
class ClassA {
public:
...
private:
ClassB object; // this variable will be shared among more instances of ClassA
}
好吧,您需要将成员移出 class,并存储一个指针。您还需要计算引用该独立对象的实例。这是很多工作,但幸运的是,C++ 标准库已为您提供 std::shared_ptr
:
class ClassA {
public:
// ...
private:
std::shared_ptr<ClassB> object; // this variable will be shared among more instances of ClassA
};
你可以使用指针。
class B { ... }
class A {
...
B *b;
...
}
main() {
A a1, a2;
B *b1 = new B();
a1.b = b1;
a2.b = b1;
}
这样 a1
和 a2
上的 b
成员引用同一个对象。
我认为 std::shared_ptr 可能是您想要的。
在那种情况下,您的代码将是这样的:
class ClassA {
public:
...
private:
std::shared_ptr<ClassB> object; // this variable will be shared among more instances of ClassA
}
但是您需要定义该指针的实例化位置,这取决于您的需要。也许您可以为您的问题提供更多背景信息,例如:
- ObjectB 来自哪里,是否属于另一个实体?
- 如何分配给ObjectA的实例?
使用静态变量:
class ClassA {
public:
...
private:
static ClassB *object; // this variable will be shared among more instances of
}
ClassB * ClassA::object = nullptr;
ClassA::ClassA()
{
if (object == nullptr)
object = new ClassB();
}
有什么方法可以让我在另一个 class 的更多实例上共享一个变量(class 的对象)?静态成员不是我要找的。我知道一个变量(大对象)将在更多实例(但不是所有实例)之间共享。我怎样才能在 C++ 中做到这一点?感谢您的帮助。
示例:
class ClassA {
public:
...
private:
ClassB object; // this variable will be shared among more instances of ClassA
}
好吧,您需要将成员移出 class,并存储一个指针。您还需要计算引用该独立对象的实例。这是很多工作,但幸运的是,C++ 标准库已为您提供 std::shared_ptr
:
class ClassA {
public:
// ...
private:
std::shared_ptr<ClassB> object; // this variable will be shared among more instances of ClassA
};
你可以使用指针。
class B { ... }
class A {
...
B *b;
...
}
main() {
A a1, a2;
B *b1 = new B();
a1.b = b1;
a2.b = b1;
}
这样 a1
和 a2
上的 b
成员引用同一个对象。
我认为 std::shared_ptr 可能是您想要的。 在那种情况下,您的代码将是这样的:
class ClassA {
public:
...
private:
std::shared_ptr<ClassB> object; // this variable will be shared among more instances of ClassA
}
但是您需要定义该指针的实例化位置,这取决于您的需要。也许您可以为您的问题提供更多背景信息,例如:
- ObjectB 来自哪里,是否属于另一个实体?
- 如何分配给ObjectA的实例?
使用静态变量:
class ClassA {
public:
...
private:
static ClassB *object; // this variable will be shared among more instances of
}
ClassB * ClassA::object = nullptr;
ClassA::ClassA()
{
if (object == nullptr)
object = new ClassB();
}