C++ C++;共享对象
我有四门课C++ C++;共享对象,c++,object,shared,C++,Object,Shared,我有四门课A,B,C和D 类A具有类的成员b B 类B具有类c的成员c A有一个成员D*dpointer 必须保留此层次结构(事实上,这是一个GUI,其应用程序、窗口、面板分别为a、B和C) 现在B和C必须使用*dpointer中的方法 作为B和C的成员,还有什么比给予dpointer更优雅的吗?它不好吗?不直接,但您可以在共享的\u ptr中放入D,这将减轻您可能遇到的任何内存管理难题。在这种情况下,您可能应该传递对B和C的引用,而不是指针。正如@Billy ONeil在中所说的,如果可能
A
,B
,C
和D
- 类
具有类的成员A
b
B
- 类
具有类B
的成员c
c
A
有一个成员D*dpointer代码>
必须保留此层次结构(事实上,这是一个GUI,其应用程序、窗口、面板分别为a
、B
和C
)
现在B和C必须使用*dpointer
中的方法
作为B
和C
的成员,还有什么比给予dpointer
更优雅的吗?它不好吗?不直接,但您可以在共享的\u ptr
中放入D,这将减轻您可能遇到的任何内存管理难题。在这种情况下,您可能应该传递对B
和C
的引用,而不是指针。正如@Billy ONeil在中所说的,如果可能和适当的话,您应该在a
中使用a或a(在不了解D
和dpointer
的情况下无法判断)。
struct D;
struct CommonABC
{
CommonABC(D * & dpointer) : dpointer(dpointer) {}
D * & dpointer;
};
struct C : CommonABC
{
C (const CommonABC & common) : CommonABC(сommon) {}
};
struct B: CommonABC
{
B (const CommonABC & common) : CommonABC(сommon), c(common) {}
C c;
};
struct A
{
A () : b(CommonABC(dpointer)) {}
D * dpointer;
B b;
};
传递对B
和C
的引用有一个好处,就是可以清楚地表明这两种引用仅用于
D
-对象,但不控制其生命周期,并且使用这些类需要D
的实例(可以选择指针NULL
)。如果B
和C
只调用D
上的const
方法,您甚至可以传递一个const引用。实际上,我可能会选择上面提到的共享ptr解决方案。但是这里有一个在C++文学中不经常被提及的问题,比如你在面试问题或脑力测试中发现的那种类型:
struct D{
D(int val);
void foo();
};
struct C:private virtual D{
void bar(){
foo();
}
};
struct B:private C,private virtual D{
void car(){
foo();
}
};
struct A:private B,private virtual D{
A(int val):D(val){}
void aar(){
car();
foo();
}
};
私有继承实现has-a关系,就像使其成为成员一样。唯一的区别是每种类型只能有一种。在这种情况下,合成中的所有类共享相同的D对象
但是,如果你想让其他人能够理解你在做什么,请使用共享的PTR。为什么要引用指针?为什么不直接存储指针呢?因为您可以在struct A
中更改dpointer
,并在B
和C
中获得更改的值。