问题描述
我正在尝试将std::atomic<unsigned int>
传递给带有可变参数的函数,例如:
#include <cstdio>
#include <cstdarg>
#include <atomic>
void info(const char* expression,...)
{
std::va_list arg;
va_start(arg,expression);
std::vprintf(expression,arg);
std::printf("\n");
std::fflush(stdout);
va_end(arg);
}
int main()
{
std::atomic<unsigned int> value(10);
info("Testing: %u",value);
return 0;
}
按原样,我得到编译器错误:error: use of deleted function ‘std::atomic::atomic(const std::atomic&)’
。但是,如果我将main中的信息调用更改为info("Testing: %u",value.load());
,则一切正常。
解决方法
在3种情况下调用复制构造函数:
- 按值传递对象时
- 按值返回对象时
- 将对象初始化为相同类型的对象的值时。
如果不想调用复制构造函数,请通过引用(最好是常量)传递对象,以避免调用复制构造函数。