如果C ++类在类方法中具有动态分配但没有构造函数/析构函数或任何非静态成员,那么它是否仍是POD类型?

问题描述 投票:0回答:1

假设我有以下课程:

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(普通旧数据)类型?

c++ oop static polymorphism dynamic-memory-allocation
1个回答
0
投票

[成员函数init的作用与否无关紧要。这不影响A是否是POD类型(是)。

POD是旧事物,在C ++ 20中已弃用,您可能要检查标准布局。

您可以在代码编写中进行确认

#include <type_traits>
static_assert(std::is_pod<A>::value);
static_assert(std::is_standard_layout<A>::value);
© www.soinside.com 2019 - 2024. All rights reserved.