我刚刚解决了一个由在基类和子类中“使用共享”引起的错误。像这样:
class B: public A {
public:
/**
* Attention! This "using Shared" should be located before "using ResCallback " because
* in class A, there is also a "using Shared".
*/
using Shared = std::shared_ptr<B>;
using ResCallback = std::function<void(const C& c, const char* data, size_t size, Shared b)>;
在另一个文件中,有类A:
class A {
public:
using Shared = std::shared_ptr<A>;
过去,我把“using ResCallback”放在“using Shared”之前,然后就出现了问题。这让我怀疑“使用共享”。有没有更好的设计风格来避免这个bug源头?
最佳答案
如您所见,在基类和派生类中具有相同的类型名称但引用不同的类型是潜在的问题来源。
我会避免在两个类中使用相同的名称 ( Shared
)。
我倾向于 APtr
和 BPtr
作为与 A
相同命名空间中的类型别名和 B
分别使用 std::shared_ptr<A>
在A
里面类,和 std::shared_ptr<B>
在B
里面类。
如果你真的喜欢X::Shared
std::shared_ptr<X>
的图案,那么您需要始终将其作为类定义中的第一个声明,然后它可以避免像您在此处看到的那样发生破坏的可能性。
关于c++ - 基类和子类 "using Shared = std::shared_ptr<>"的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59049119/