use of deleted function ‘sensememory::memory_operation::MemoryWriter::MemoryWrit...
🚨 错误信息
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解决方案
代码报错分析报告在
在你的代码第 30 行,尝试用一个 错误发生在
理解设计模式:当使用单例模式 (
善用编译器和 IDE 提示:现代 IDE(如 CLion, VS Code)和编译器警告通常会高亮显示试图使用已删除或私有的函数。注意这些早期警告,可以快速定位此类问题。
---
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 行)。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) 时,其返回值通常是一个 引用 或 指针,因为你不应该(或不能)拷贝这个唯一的实例。务必使用引用来接收它。