c++ 检查一个基引用的大多数派生 class 是否有另一个基
c++ Check if most derived class of a base reference has another base
这是我希望看到的行为的一些示例代码:
// Example program
#include <iostream>
#include <string>
#include <type_traits>
#include <vector>
class BaseA
{
public:
BaseA() { };
};
class BaseB
{
public:
BaseB() { };
};
class Derived1 : public BaseA
{
public:
Derived1() : BaseA() { };
};
class Derived2 : public BaseA, public BaseB
{
public:
Derived2() : BaseA(), BaseB() { };
};
int main()
{
std::vector<BaseA *> collection_of_As{
new Derived1{}, new Derived1{}, new Derived2{},
new Derived2{}, new Derived1{}, new Derived2{}
};
for (BaseA * Aptr: collection_of_As) {
BaseB * Bptr = dynamic_cast<BaseB *>(Aptr);
std::cout << std::boolalpha << (Bptr != std::nullptr) << std::endl;
}
return 0;
}
但它不会编译,因为 BaseA 不是多态的,即使它是最派生的 class 也是如此。我明白为什么这不起作用,但我仍然需要这种行为。有什么办法可以编译和工作吗?
使 BaseA
多态。最简单的方法是给它一个虚拟析构函数。
class BaseA
{
public:
virtual ~BaseA() {}
};
如果您想修复示例中的内存泄漏,无论如何您都需要一个。
这是我希望看到的行为的一些示例代码:
// Example program
#include <iostream>
#include <string>
#include <type_traits>
#include <vector>
class BaseA
{
public:
BaseA() { };
};
class BaseB
{
public:
BaseB() { };
};
class Derived1 : public BaseA
{
public:
Derived1() : BaseA() { };
};
class Derived2 : public BaseA, public BaseB
{
public:
Derived2() : BaseA(), BaseB() { };
};
int main()
{
std::vector<BaseA *> collection_of_As{
new Derived1{}, new Derived1{}, new Derived2{},
new Derived2{}, new Derived1{}, new Derived2{}
};
for (BaseA * Aptr: collection_of_As) {
BaseB * Bptr = dynamic_cast<BaseB *>(Aptr);
std::cout << std::boolalpha << (Bptr != std::nullptr) << std::endl;
}
return 0;
}
但它不会编译,因为 BaseA 不是多态的,即使它是最派生的 class 也是如此。我明白为什么这不起作用,但我仍然需要这种行为。有什么办法可以编译和工作吗?
使 BaseA
多态。最简单的方法是给它一个虚拟析构函数。
class BaseA
{
public:
virtual ~BaseA() {}
};
如果您想修复示例中的内存泄漏,无论如何您都需要一个。