Le type suivant doit faire partie de l'espace
de noms
encap dans le fichier
no_copy.hpp :
class DataSet
{
public:
DataSet(std::vector<int> values)
: values_{std::move(values)}
{
// (empty) constructor body
}
// ...
int
length() const
{
return int(size(values_));
}
private:
std::vector<int> values_;
};
Il s'agit d'une part de compléter ce type afin que :
- les opérations de recopie soient interdites,
- les versions automatiquement générées des opérations de déplacement
soient autorisées.
D'autre part, il faut réaliser, dans le fichier
prog_ex0403.cpp, cette
fonction :
void
test_DataSet()
{
std::cout << "\n~~~~ " << __func__ << "() ~~~~\n";
s4prc::DataSet ds1{{10, 20, 30, 40, 50}};
std::cout << "before: ds1.length()=" << ds1.length() << '\n';
// ...copy-construct ds2 from ds1... (should be rejected)
// ...move-construct ds2 from ds1...
// ...display the length of ds1 and ds2...
std::cout << "----\n";
s4prc::DataSet ds3{{10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130}};
// ...display the length of ds2 and ds3...
// ...copy-assign ds3 from ds2... (should be rejected)
// ...move-assign ds3 from ds2...
// ...display the length of ds2 and ds3...
}
qui sera appelée depuis la fonction
main().
Il faut la compléter en suivant les commentaires afin de vérifier que
le contrôle des opérations de recopie et de déplacement sur le type
DataSet opère comme prévu.
Les tentatives de recopie, qui seront rejetées par le compilateur,
devront être conservées sous forme de commentaires afin de rester
lisibles pour mémoire.
Les affichages doivent indiquer lisiblement l'effet des opérations
autorisées.