在现代C+中传递指针结构在技术上正确吗+;? 我有一个C++程序,它使用Qt来实现逻辑和GUI。随着程序的发展,我发现有很多指针通信是需要的,尤其是对于GUI。我想有一个C++结构,它保存指向所有需要传递的对象的指针,以便任何其他对象都需要从指针的结构中提取。 struct ObjectPointers { FirstObject *firstObject = shared_ptr firstClass; SecondObject *secondObject = shared_ptr secondClass; ThirdObject *thirdOjbect = shared_ptr secondClass; ... }

在现代C+中传递指针结构在技术上正确吗+;? 我有一个C++程序,它使用Qt来实现逻辑和GUI。随着程序的发展,我发现有很多指针通信是需要的,尤其是对于GUI。我想有一个C++结构,它保存指向所有需要传递的对象的指针,以便任何其他对象都需要从指针的结构中提取。 struct ObjectPointers { FirstObject *firstObject = shared_ptr firstClass; SecondObject *secondObject = shared_ptr secondClass; ThirdObject *thirdOjbect = shared_ptr secondClass; ... },c++,pointers,C++,Pointers,任何其他需要其中一个对象的对象将执行以下操作: // Initializing the ObjectPointers instance ObjectPointers *ops = shared_ptr ObjectPointers; // Initializing some random object instance SomeNewOjbect sno{ops->secondObject}; 这种方法在技术上可以接受吗?是不是太过分了?是否有我可能忽略的角落案例?替代方案是什么?您似

任何其他需要其中一个对象的对象将执行以下操作:

// Initializing the ObjectPointers instance
ObjectPointers *ops = shared_ptr ObjectPointers;

// Initializing some random object instance
SomeNewOjbect sno{ops->secondObject};

这种方法在技术上可以接受吗?是不是太过分了?是否有我可能忽略的角落案例?替代方案是什么?

您似乎对共享ptr的工作原理及其用途感到困惑。可能是因为试图将java/C语言语义强加到C++程序上。 我假设您的
FirstObject
SecondObject
等都是在其他地方管理的长寿命对象,比如顶级窗口及其数据结构

首先,这不是C++语法。
共享\u ptr firstClass
是否意味着要有一些
FirstObject*FirstObject
是一个(原始)指针,指向
FirstObject
类型的对象,它通常与
firstClass
实例完全无关

这类似于默认初始化共享\u ptr,然后将其分配给原始指针,这也是无效的,除非(非标准)共享\u ptr提供到原始指针的默认转换。其净效果与在这些位置分配
nullptr
相同

为了回答您的问题,拥有这样一个结构(拥有一堆“尖头”成员)本身并不坏,但它表明了一种可以重新设计的体系结构,使得在任何一个地方都需要尽可能少的东西。使用shared_ptr的细节也值得怀疑,因为这意味着您不知道这些对象的生存期

struct MyObjects {
    MyObjects() : 
      firstObject(/* get firstObject from somewhere */),  
      secondObject(/* get secondObject from elsewhere */),
      ...
      {}
    FirstObject & firstObject;
    SecondObject & secondObject;
    ...
}

<>这将被用于当我知道<代码> MyObjs<代码>完全在第一个对象< /COD> >代码>第二个对象>代码>等的生命周期中,作为NC++(P/P)结构是C++中的类。还有吊舱物体。有点不清楚问题出在哪里。也许你应该在或上试试这个。避免交叉发布。<代码>结构对象指针{FrasObjult*FieldObjs= SyddyPtFrestCype;语法似乎无效。这是真的C++吗?使用<代码> SyddypTr>代码>到处都是过度的,它只应该用于复杂场景中的共享所有权。
struct MyObjects {
    MyObjects() : 
      firstObject(/* get firstObject from somewhere */),  
      secondObject(/* get secondObject from elsewhere */),
      ...
      {}
    FirstObject & firstObject;
    SecondObject & secondObject;
    ...
}