In the UML diagram, there is a distinction between aggregation and composition. In most garbage collected programming languages, there are no difference in code between them. However, composition implies ownership while aggregation does not.
struct Composition {
T1 v1;
std::unique_ptr<T2> v2;
};
struct Aggregation {
T* v = nullptr; // non-owning
};