copy-swap idiom