J'ai un problème de « Les extensions bibliothèque standard C++ »:construire deux objets shared_ptr du même pointeur
Exercice 6
je l'ai dit à la section 2.4.2 que vous ne devriez pas construire deux objets shared_ptr du même pointeur . Le danger est que les deux objets shared_ptr ou leur progéniture essaieront éventuellement de supprimer la ressource , ce qui entraîne généralement un problème . En fait, vous pouvez le faire si vous êtes prudent. Ce n'est pas particulièrement utile, mais écrivez un programme qui construit deux objets shared_ptr de le même pointeur et supprime la ressource une seule fois.
ci-dessous est ma réponse:
template <typename T>
void nonsence(T*){}
struct SX {
int data;
SX(int i = 0) :
data(i) {
cout << "SX" << endl;
}
~SX() {
cout << "~SX" << endl;
}
};
int main(int argc, char **argv) {
SX* psx=new SX;
shared_ptr<SX> sp1(psx),sp2(psx,nonsence<SX>);
cout<<sp1.use_count()<<endl;
return 0;
}
mais je ne pense pas que ce soit une bonne solution - parce que je ne veux pas le résoudre par le constructeur d'utilisation. quelqu'un peut-il m'en donner un meilleur? thx, pardonnez mon mauvais anglais.
Il vous manque un "{" dans le constructeur SX. (Juste pour être pédant) –