我正试图将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&)’
。但是,如果我将主中的info调用更改为info("Testing: %u", value.load());
,则一切都很好。
为什么在我没有指定加载的情况下调用复制构造函数?
复制构造函数在三种情况下被调用:
- 通过值传递对象时
- 按值返回对象时
- 当一个对象被初始化为相同类型的对象的值时
如果不想调用复制构造函数,请通过引用传递对象(最好是常量(以避免调用复制构造函数。