170 похожих чатов

Как бы вы модифицировали класс Foo для того, чтобы оператор

присваивания обеспечивал строгую гарантию безопасности исключений? Имейте в виду, что 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;
};

14 ответов

15 просмотров
Сергей- Автор вопроса

В чём проблема? Почему я не могу копировать значения, которые лежат под указателем?

Надо тогда агрегировать T по ссылке (через указатель)...

Сергей
А что это значит?

emplate<typename T> class Foo { private: T *data; };

Ilya Zviagin
emplate<typename T> class Foo { private: T *d...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Ilya Zviagin
emplate<typename T> class Foo { private: T *d...

Хотя, в таком случае как владеть T ? Неясно...

зачем тут shared_ptr

Denis P
странный у вас operator=

я его не менял... (убрал)

Ilya Zviagin
я его не менял... (убрал)

только в оригинале был не указатель и проблем не было)

Сергей- Автор вопроса
Denis P
только в оригинале был не указатель и проблем не б...

Была проблема соблюдения строгой гарантии исключений. И вот я пытался решить это через указатель на тип Т.

Сергей- Автор вопроса
Denis P
shared_ptr то зачем?

чтобы не использовать сырой указатель и new.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта