Copy construction of VariableSizeCommunicator leads to runtime errors.
VariableSizeCommunicator does not have copy constructors (or assignment operator) implemented.
The default generated constructor copies the
MPI_Comm communication_ member without using
Thus, when the copy constructed object and its source both have a
communication_ member pointing to the same data, which is double freed (by
MPI_Comm_free) when the objects get destructed. This could be fixed by writing a suitable copy constructor.
I only had a quick glance, but it seems that
BufferedCommunicator uses neither
MPI_Comm_free and thus does not assume any responsibility for its data. Maybe this would be a viable approach, too.