Je ne vois pas de documentation avantage:
#include <boost/noncopyable.hpp>
struct A
: private boost::noncopyable
{
};
vs:
struct A
{
A(const A&) = delete;
A& operator=(const A&) = delete;
};
Lorsque vous ajoutez déplacer uniquement les types, j'ai même voir la documentation trompeuse. Les deux exemples suivants ne sont pas copiable, bien qu'ils soient mobiliers:
#include <boost/noncopyable.hpp>
struct A
: private boost::noncopyable
{
A(A&&) = default;
A& operator=(A&&) = default;
};
vs:
struct A
{
A(A&&) = default;
A& operator=(A&&) = default;
};
En vertu de l'héritage multiple, il peut même être un espace de pénalité:
#include <boost/noncopyable.hpp>
struct A
: private boost::noncopyable
{
};
struct B
: public A
{
B();
B(const B&);
B& operator=(const B&);
};
struct C
: public A
{
};
struct D
: public B,
public C,
private boost::noncopyable
{
};
#include <iostream>
int main()
{
std::cout << sizeof(D) << '\n';
}
Pour moi, cela m'affiche:
3
Mais ce qui, je crois, pour avoir supérieure de la documentation:
struct A
{
A(const A&) = delete;
A& operator=(const A&) = delete;
};
struct B
: public A
{
B();
B(const B&);
B& operator=(const B&);
};
struct C
: public A
{
C(const C&) = delete;
C& operator=(const C&) = delete;
};
struct D
: public B,
public C
{
D(const D&) = delete;
D& operator=(const D&) = delete;
};
#include <iostream>
int main()
{
std::cout << sizeof(D) << '\n';
}
Sorties:
2
Je trouve ça beaucoup plus facile de déclarer mes opérations de copie que de raison si oui ou non je suis découlant de l' boost::non_copyable
plusieurs fois et si cela va me coûter. Surtout si je ne suis pas l'auteur complète de la hiérarchie d'héritage.