присваивания обеспечивал строгую гарантию безопасности исключений? Имейте в виду, что std::swap для T также может кидать исключения при копировании. Накладывать ограничения на тип Т нельзя.
template<typename T>
class Foo {
public:
Foo &operator = (const Foo &other) {
data = other.data;
}
private:
T data;
};
Пытался решить с помощью указателя на data. Но выдаёт сег фолт. Вот код моего решения.
template<typename T>
class Foo {
public:
Foo& operator= (const Foo& other) {
if(this == &other) return *this;
auto copy = std::make_shared<T>();
*copy = *other.data;
std::swap(data, copy);
return *this;
}
private:
std::shared_ptr<T> data;
};
В чём проблема? Почему я не могу копировать значения, которые лежат под указателем?
Надо тогда агрегировать T по ссылке (через указатель)...
А что это значит?
emplate<typename T> class Foo { private: T *data; };
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Хотя, в таком случае как владеть T ? Неясно...
зачем тут shared_ptr
странный у вас operator=
я его не менял... (убрал)
только в оригинале был не указатель и проблем не было)
Была проблема соблюдения строгой гарантии исключений. И вот я пытался решить это через указатель на тип Т.
shared_ptr то зачем?
чтобы не использовать сырой указатель и new.
Обсуждают сегодня