Я не вижу причины, почему они не имеют перегрузки оператора присваивания для простых старых указателей типа, к которому они привязаны. Если цель создания интерфейса интеллектуальных указателей как можно ближе к простым старым указателям, то почему они не сделали перегрузку для оператора присваивания следующим образом?std :: shared_ptr или std :: unique_ptr Перегрузка операторов присваивания
inline std::shared_ptr<type> &operator=(const type * pointer)
{
reset(a);
}
таким образом, вы могли бы использовать их так же, как вы бы нормальный указатель, например, так:
std::shared_ptr<int> test = new int;
это не проблема вообще, просто интересно, почему они пошли на проблемы просто перегружать пару операторов.
Также интересно, есть ли способ перегрузить глобальный оператор присваивания для этого, или если есть какая-то причина, я не должен этого делать.
Редактировать: добавив ответ Навазу о его ответе здесь для форматирования кода. Я просто написал эту тестовую программу, чтобы увидеть, если то, что вы говорили, был прав:
template<class T>
class peh
{
public:
peh() {meh = 3;}
const peh<T> & operator=(const int * peh)
{
}
};
void f(peh<int> teh)
{
}
int main()
{
int * meh = new int;
f(meh);
system("PAUSE");
return 0;
}
это здесь ошибки, говоря, что нет использовать преобразование peh<int>
в int *
. так почему это приемлемо с std::shared_ptr<int>
до int *
?
Глобального оператора присваивания нет. Оператор присваивания может быть перегружен только как функция-член. –
@BenjaminLindley: Я думаю, он говорил о том, почему он не является функцией-членом, так как он хочет написать 'std :: shared_ptr test = new int;'. –
Nawaz
@Nawaz: Прочтите его последнее заявление. –