Que el código es de un fallido intento de utilizar un truco común para garantizar la memoria asignada por el vector es liberado. Puede o no puede hacer, dependiendo de si o no el vector del constructor de copia asigna memoria para que coincida con el otro vector de tamaño, o su capacidad.
De manera confiable libre de la memoria, utilice la siguiente:
void clear_decoy() {
vector<weight>().swap(decoy);
}
Esto crea un temporal de vector vacío (con poca o ninguna memoria asignada), swaps de este con decoy
de modo que la memoria es ahora propiedad de la temporal, y luego destruye el temporal, la liberación de la memoria.