У меня есть проблема с "The C++ Standard Library Extensions":построить два shared_ptr объектов из того же указателя
Упражнение 6
я сказал в разделе 2.4.2 , что вы не должны построить два shared_ptr объекты из того же указателя . Опасность состоит в том, что оба объекта shared_ptr или их потомство в конечном итоге попытаются удалить ресурс , что обычно приводит к ошибке . Фактически, вы можете это сделать, если вы будете осторожны. Это не особенно полезно, но напишите программу, что создает два объекта shared_ptr из тот же указатель и удаляет ресурс только один раз.
ниже мой ответ:
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;
}
, но я не думаю, что это хорошее решение - потому что я не хочу его решения по использованию конструктора. может ли кто-нибудь дать мне лучшую? thx, простите мой плохой английский.
вам не хватает «{» в конструкторе SX. (Просто быть педантичным) –