假设我有以下课程:
class A
{
public:
int index;
int init(int type);
}
int A::init(int type)
{
Interface* interface = SelectInterface(type);
int index = interface->get_index(type);
delete interface;
}
然后我有以下界面:
// ----------- INTERFACES -------------- //
class Interface
{
virtual int get_index() = 0;
}
// This is the interface factory
Interface* SelectInterface(int type)
{
if (type == 0)
{
return new InterfaceA();
}
else if (type == 1)
{
return new InterfaceB();
}
return null;
}
class InterfaceA :: public Interface
{
InterfaceA();
int get_index();
}
int InterfaceA::get_index()
{
return 5;
}
class InterfaceB :: public Interface
{
InterfaceB();
int get_index();
}
int InterfaceB::get_index()
{
return 6;
}
A类没有任何构造函数或析构函数,或任何非静态数据成员。但是,类A会动态分配对象,然后在类方法中将其删除。
A类是否仍是POD(普通旧数据)类型?
[成员函数init
的作用与否无关紧要。这不影响A是否是POD类型(是)。
POD是旧事物,在C ++ 20中已弃用,您可能要检查标准布局。
您可以在代码编写中进行确认
#include <type_traits>
static_assert(std::is_pod<A>::value);
static_assert(std::is_standard_layout<A>::value);