Tengo una clase como la siguiente.Error con el constructor de copia/operador de asignación para una clase que tiene la variable de miembro std :: atomic
#include <atomic>
static const long myValue = 0;
class Sequence
{
public:
Sequence(long initial_value = myValue) : value_(initial_value) {}
private:
std::atomic<long> value_;
};
int main()
{
Sequence firstSequence;
Sequence secondSequence = firstSequence;
return 0;
}
estoy consiguiendo error de compilación como esta,
test.cpp:21:36: error: use of deleted function ‘Sequence::Sequence(const Sequence&)’
test.cpp:5:7: error: ‘Sequence::Sequence(const Sequence&)’ is implicitly deleted because the default definition would be ill-formed:
test.cpp:5:7: error: use of deleted function ‘std::atomic<long int>::atomic(const std::atomic<long int>&)’
¿Es que el constructor de copia por defecto y asignación opertaor no funcionan en este caso?
PS: Estoy utilizando la versión de gcc 4.6.3
¿Se puede editar y agregar un ejemplo de código de compilación? No puedo resolver este problema, lo he intentado: 'Secuencia & operator = (const Sequence & other) {value_ = other.value_.load(); devuelve * esto; } ' –
@VictorLamoine: No tengo idea de lo que hizo, pero el enfoque general [funciona] (https://wandbox.org/permlink/ZsHPDqhrIiybq7qf). –
Para obtener más información sobre cómo escribir un constructor de copia (con 'seq_cst' predeterminado para cargar el origen, pero luego evitar el costo de un almacén atómico en el objeto en construcción), vea [Copiar constructor para las clases con miembro atómico ] (https://stackoverflow.com/questions/19961043/copy-constructor-for-classes-with-atomic-member/46045691#46045691). Asegúrese de que esto sea realmente lo que desea implementar; la copia alrededor de átomos suele ser contraria a su propósito como estado compartido. –