队列指针和c ++中的动态分配

时间:2013-03-12 07:04:43

标签: c++ queue malloc

我有这部分代码:

struct IARM_DATA
{
    IARM_HANDLE handle;
    float position[6];  //May be joint or linear position
    float gripper_opening;
    IARM_LIFT_POSITION lift_position;
    bool foldIn;  //true if foldin and false if fold out
    bool openGripper;

    IARM_DATA(IARM_HANDLE _handle, bool _foldIn):handle(_handle),foldIn(_foldIn){}; 

    IARM_DATA(IARM_HANDLE _handle, IARM_LIFT_POSITION _lift_position):handle(_handle),
        lift_position(_lift_position){}; //handle, lift_position

    IARM_DATA(IARM_HANDLE _handle, volatile float _position[6], float _gripper_opening, IARM_LIFT_POSITION _lift_position):
    handle(_handle),gripper_opening(_gripper_opening), lift_position(_lift_position)
    {
        for(int i=0; i<6; i++)
            position[i] = _position[i];
    }; //handle, position, gripper_opening, lift_position

} ;

typedef IARM_RESULT (iArmDriver::*singleMvt)(IARM_DATA); //这是iArmDriver方法的指针。

typedef struct {
    singleMvt mvt;
    IARM_DATA data;
} ONE_MVT;

这样的队列声明:

std::queue<ONE_MVT> *iarmActions;

我的问题是,由于该队列我遇到了执行问题,我是否应该进行动态分配:

iramActions = (std::queue<ONE_MVT> *)sife0f(std::queue<ONE_MVT> *); ??

提前致谢

2 个答案:

答案 0 :(得分:2)

您不应该使用动态分配。只需在自动存储中创建队列:

std::queue<ONE_MVT> iarmActions;

如果您确实需要动态分配(我怀疑),请使用smart pointer。智能指针的确切类型取决于您的用例。此示例使用unique_ptr,这通常是默认选项:

std::unique_ptr<std::queue<ONE_MVT>> iarmActions(new std::queue<ONE_MVT>());

答案 1 :(得分:0)

std::queue<ONE_MVT> *iarmActions;

为什么要使用指向容器的指针呢?你可以拥有容器 - 它将默认构造为没有元素/大小0,但在填充它之前不会占用太多空间。

std::queue<ONE_MVT> iarmActions;