use of deleted function ‘sensememory::memory_operation::MemoryWriter::MemoryWrit...

2026年01月13日 14:29 状态: processing

🚨 错误信息

test_sensememory_components.cpp: In function ‘void test_MemoryOperation()’: /data/gerrit/workspace_Chery_repo/SenseMemory/Tests/integration/test_sensememory_components.cpp:30:60: error: use of deleted function ‘sensememory::memory_operation::MemoryWriter::MemoryWriter(const sensememory::memory_operation::MemoryWriter&)’ 30 | MemoryWriter struct_writer = MemoryWriter::getInstance(); | ^ In file included from /data/gerrit/workspace_Chery_repo/SenseMemory/Tests/integration/test_sensememory_components.cpp:16: /data/gerrit/workspace_Chery_repo/SenseMemory/MemoryOperation/MemoryWriting/include/MemoryWriter.hpp:30:5: note: declared here 30 | MemoryWriter(const MemoryWriter&) = delete; | ^~~~~~~~~~~~

🤖 AI解决方案

代码报错分析报告

---

1. 错误翻译

cpp
原文:error: use of deleted function ‘sensememory::memory_operation::MemoryWriter::MemoryWriter(const sensememory::memory_operation::MemoryWriter&)’
译文:错误:使用了已删除的函数 ‘sensememory::memory_operation::MemoryWriter::MemoryWriter(const sensememory::memory_operation::MemoryWriter&)’

---

2. 原因分析

这是一个典型的 C++ 单例模式 (Singleton) 拷贝构造函数使用错误。

根本原因

  • MemoryWriter 类的定义中,拷贝构造函数被显式地 delete 了(第 30 行)。

  • 在你的代码第 30 行,尝试用一个 MemoryWriter::getInstance() 的返回值来 拷贝初始化 一个 MemoryWriter 对象。这触发了对被删除的拷贝构造函数的调用。
  • 错误上下文

  • 错误发生在 test_sensememory_components.cpp 文件的 test_MemoryOperation() 函数内。

  • MemoryWriter 类使用了单例模式,这意味着该类旨在只有一个实例,其拷贝操作被禁用是合理的,以防止意外的实例复制。
  • ---

    3. 解决方案

    核心思路:使用 引用 来持有单例实例,而不是尝试创建一个副本。

    修复后的代码

    cpp
    // 原来的错误写法:
    // MemoryWriter struct_writer = MemoryWriter::getInstance();

    // 正确的写法:
    MemoryWriter& struct_writer = MemoryWriter::getInstance();
    // 或者,使用指针:
    // MemoryWriter* struct_writer_ptr = &MemoryWriter::getInstance();

    ---

    4. ️ 预防措施

  • 理解设计模式:当使用单例模式 (getInstance) 时,其返回值通常是一个 引用指针,因为你不应该(或不能)拷贝这个唯一的实例。务必使用引用来接收它。

  • 善用编译器和 IDE 提示:现代 IDE(如 CLion, VS Code)和编译器警告通常会高亮显示试图使用已删除或私有的函数。注意这些早期警告,可以快速定位此类问题。