Avoid owning raw pointers. Even without exceptions, they are prone to leak.
Use a sensiblestd::unique_ptrstd::unique_ptr,std::anystd::anyorstd::variantstd::variant. The latter even avoid extra dynamic allocations, though at the cost of potentially wasting a small amount of memory.Are you sure there's always at least one person?