将成员对象更改为指针以解决循环依赖性
Change member object to pointer to resolve circular dependency
所以我已经搜索了一个答案,我找到了很多相关信息,但没有任何回答。
我已经看到了很多有关何时使用指针来对象说只需使用实际对象而不是尽可能使用实际对象的建议。我还看到了有关循环依赖项的建议,说在可能的情况下不包含.h文件。我已经通过将类的对象成员切换到对象来修复了很多代码(就循环依赖项而言)。我最终得到了很多指针成员,似乎与第一个建议背道而驰。
我的问题是,将所有对象成员切换到指针以解决循环依赖性是一个坏主意吗?还是这表示我的课程的不良结构,我需要重新设计?还是更准确地说,具有循环依赖性是否证明对象成员更改指针合理?还是要太具体地归结为每种情况?
如果我不是经验丰富的程序员,我深表歉意。
谢谢
我从未听说过"有很多指针是不好的,尝试使用对象" ...如果您不知道如何使用它们,则指针是"危险的"但是想想以下课程:
class myClass {
private:
GIGANTIC_OBJECT obj;
}
如果MyClass经常被分配/交易...您是否宁愿拥有大对象或一个指针?
标题文件的圆形依赖关系是另一个问题(如果您指向对象,除非您使用不透明的指针,否设计缺陷,例如
foo.h
class foo {
public:
bar b;
};
bar.h
class bar {
public:
foo f;
};
以上是非法的,您可以轻松地避免使用
foo.h
class bar; // forward declaration
class foo {
...
bar *b;
...
};
bar.h
class foo; // forward declaration
class bar {
...
foo *f;
...
};
(https://stackoverflow.com/a/4816751/1938163)
另外: #pragma的使用一旦指令>指令可以帮助减少多份。
总结:我认为没有更多的指针或对象是一项一对一的规则,它取决于情况(例如,通过值将大对象传递到函数是愚蠢的),而标头的循环依赖性是一个相对不喜欢的问题通常应该让您认为"我是否正确设计它?/我做错了什么?"。
循环依赖性是指您的层次结构或接口设计,或者职责隔离是次优的。如果您拥有它们,那么您用什么技巧来使编译器仍在构建它们并开始使用,我个人会喜欢:
我个人会做std::shared_ptr<T*>
。 namespace elsewhere { class T; }
namespace here {
class A {
std::shared_ptr<T> _t;
}
}
和其他地方
namespace here { class A; }
namespace elsewhere {
class T {
std::shared_ptr<A> _a;
}
}
在这个主题上,循环依赖性总是像
[Apriv,Acoupled]<-->[Bcoupled, Bpriv]
通常可以轻松地转换为归一化形式
[Apriv]<--[Acoupled,Bcoupled]-->[Bpriv]
- Ardunio UNO解决了多个重叠的定时器循环
- 在java中解决这段代码时面临循环中的问题
- 循环无限运行C++解决骑士之旅问题
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 在包含窗口标头时难以解决循环依赖关系问题
- C++ 而循环问题 Codecademy 参考 [已解决]
- 解决循环依赖关系 c++ 的想法
- 解决C++中 3 个类的循环包含
- C++ 循环屏障中的倒计时使用原子变量出错[请无锁的解决方案]
- 为什么使用 2 个嵌套循环 O(n^2) 复杂度来解决二和问题,当只改变循环计数器逻辑时运行得更快?
- "invalid use of incomplete type" .解决循环依赖关系
- 将成员对象更改为指针以解决循环依赖性
- C++正在创建一个头来解决循环依赖关系,这是一个好主意
- C++是否有解决循环依赖的方法
- C++使用一个模板解决循环依赖关系
- 视觉C++在解决循环依赖关系时遇到了设计问题
- 通过两次链接同一个库来解决循环依赖关系
- 正在解决循环依赖关系
- 为什么前向声明和指针(或引用?)可以解决循环依赖
- 当向前声明不可能尽可能优雅时,我如何解决循环类依赖