I have a C++ library, which supposed to do some computations on multiple threads. I made independent threads code (i.e. there are no shared variables between them), except f
You're trying to copy a non-copyable type: the AtomicUInt64 constructor takes an atomic by value.
If you need it to be initialisable from atomic, then it should take the argument by (const) reference. However, in your case, it doesn't look like you need to initialise from atomic at all; why not initialise from uint64_t instead?
Also a couple of minor points:
The copy constructor and assignment operator should take their values by const reference, to allow temporaries to be copied.
Allocating the vector with new is a rather odd thing to do; you're just adding an extra level of indirection with no benefit.
Make sure you never resize the array while other threads might be accessing it.