c++ 浅拷贝
发布日期:2021-05-10 05:48:04 浏览次数:22 分类:精选文章

本文共 708 字,大约阅读时间需要 2 分钟。

threadpool

的 append_task 函数实现

//T 是一个泛型类型,调用该函数时需要指定具体的类型,此时 T 就是以该类型运行的类型。

class t { public: template

void append_task(T* task) { // 开辟内存,创建 T 类型的对象 T* t = (T*) calloc(1, sizeof(T)); // 拷贝 task 对象到新创建的内存块中 memcpy(t, task, sizeof(T));

// 将 t 添加到 it 对应的队列中
(*it)->append_queue_task(t);

} };

t 的实现细节解释:

  • 通过 calloc 函数开辟内存空间,这样新分配的内存块和原对象指针指向同一位置。
  • memcpy 是浅拷贝操作,它会将 task 对象的所有 data 成土拷贝到新分配的内存空间中。
  • new 对象 t 会引用原始对象 task 的内存空间。
  • 最终 t 被添加到对应的队列中进行任务处理。
  • 浅拷贝与深拷贝的区别:

    • 浅拷贝( memcpy 样式) 仅复制目标对象所占内存的全部字节数。 优点:效率较高,不需要递归或复杂的循环。 缺点:如果应用场景需要每个对象保留完整的独立内存空间,则浅拷贝可能不足以满足需求。

    • 深拷贝(手动实现) 将目标对象的内存拷贝到新分配的内存空间中,然后重置指针使其独立存在。 适用于以下场景:

    • 对象包含指向其他对象的指针或有动态内存管理需求。
    • 需要确保对象间完全独立,以防止意外修改导致的链式崩溃。

    如果需要深拷贝,建议在构造函数或拷贝函数中手动实现深拷贝逻辑,以确保指针所指的数据独立存储。

    上一篇:字符组合拆分
    下一篇:c++获取时间毫秒

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年04月24日 00时03分13秒