> The paper that describes make_unique - and contains an implementation > - can be found here [1]. For reference, the full code to have > make_unique ready to paste in any file is here [2].
Make unique is only a method to create a std::unique_ptr, and it doesn't provide (or, rather, inhibit) the features d_ptr does. Namely, d_ptr uses unique_ptr for most of its logic, but makes the interface to the class slimmed down and safer - tailored exactly for this case. It removes: - modifiers - get() and friends - operator bool - operator* - comparison operators - possibility to be null It mostly makes the interface and behaviour look as if it was no pointer at all, apart from accessing members with d->. > P1 - safety: no access to the raw pointer > P2 - safety: no accidental initialization errors or anything similar > P3 - safety: no possible leaks > P4 - convenience: forwarded constructor arguments (': d(1,2)' instead of ': > d(new Private(1,2))') > P5 - convenience: default constructor works for no-arg Private constructor > (nothing instead of 'd(new Private())') > P6 - convenience: no delete d; > P7 - they are spiffy (Aaron) std::unique_ptr with make_unique does not provide P1, P2, P5 and P4. For P4, you would need to write d(make_unique<Private>(...)) in order for it to work instead of d(...), which is not much cleaner than d(new Private(...)). Cheerio, Ivan -- While you were hanging yourself on someone else's words Dying to believe in what you heard I was staring straight into the shining sun _______________________________________________ Kde-frameworks-devel mailing list Kde-frameworks-devel@kde.org https://mail.kde.org/mailman/listinfo/kde-frameworks-devel