You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从另一个结构体为结构体赋值?——job结构体中tasks成员的赋值难题

解决C++中job结构体tasks成员的赋值问题

嘿,我来帮你搞定这个问题~ 你遇到的核心问题是:job里的tasks是queue<command*>类型——它存储的是command对象的指针,而不是command对象本身,所以直接用command变量赋值肯定行不通。下面给你两种靠谱的解决方案,按需选择:

方案一:使用动态分配的command指针入队

如果你确实需要用指针队列(比如要在多个地方共享command对象,或者需要多态特性),可以通过new创建command的动态实例,再把指针推入队列:

// 先创建command对象的指针
command* cmd1 = new command{"clean", 5};
command* cmd2 = new command{"backup", 10};

// 将指针推入tasks队列
job a;
a.time = 20;
a.ID = 2;
a.tasks.push(cmd1);
a.tasks.push(cmd2);

⚠️ 注意:用new分配的内存需要手动释放,否则会造成内存泄漏。在job不再使用时,记得遍历队列清理每个指针:

while (!a.tasks.empty()) {
    delete a.tasks.front(); // 释放指针指向的内存
    a.tasks.pop(); // 弹出队列元素
}

方案二:改用值类型队列(更推荐,更安全)

如果不需要共享command对象,只是单纯存储任务,建议把tasks的类型改成queue<command>(存储对象而非指针),这样就可以直接用command变量赋值,还不用操心内存管理:

首先修改job结构体:

struct job{ 
    queue<command> tasks; // 把command*改成command
    int ID = 0; 
    jobState *table = NULL; 
    int time = 0; 
};

然后赋值就非常简单了:

job a;
a.time = 20;
a.ID = 2;

// 直接创建command对象入队
command cmd1{"clean", 5};
a.tasks.push(cmd1);

// 或者直接用emplace原地构造command对象,更高效
a.tasks.emplace("backup", 10);

选择建议

  • 如果你的command需要被多个job或其他模块共享,或者command是某个基类(需要多态),就用方案一;
  • 否则优先选方案二,代码更简洁,也避免了内存泄漏的风险。

内容的提问来源于stack exchange,提问作者Mah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:32:46