Size: a a a

2020 August 22

AF

Aidar Fattakhov in supapro.cxx
horse horssyyy
Подскажите, такой вопрос философский. Если я в своей программе везде буду использовать shared_ptr для всех создаваемых объектов, я могу ожидать что все будет работать как я привык в джавах там всяких или джаваскрипте? Просто количество способов управлять памятью немного вгоняет в шок
Нет
источник

AF

Aidar Fattakhov in supapro.cxx
horse horssyyy
Допустим не берем во внимание циклические ссылки
Тогда да но мб будет лагать больше чем в8
источник

E

Erdem in supapro.cxx
а вот допустим чем отличаются эти коды:
class A {
public:
 A(string s) : value(move(s)) {}
private:
 string value;
};
и
class A {
public:
 A(string&& s) : value(forward<string>(s)) {}
private:
 string value;
};
ведь всё равно при вызове конструктора и там и там оригинальная строка скопируется один раз, зачем городить forward?
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Danya
Хммм, что такое non-object types?

Template parameters
Types - the types that may be stored in this variant. All types must meet the Destructible requirements (in particular, array types and non-object types are not allowed).


https://en.cppreference.com/w/cpp/utility/variant
Ссылки, функции
источник

D

Danya in supapro.cxx
Erdem
а вот допустим чем отличаются эти коды:
class A {
public:
 A(string s) : value(move(s)) {}
private:
 string value;
};
и
class A {
public:
 A(string&& s) : value(forward<string>(s)) {}
private:
 string value;
};
ведь всё равно при вызове конструктора и там и там оригинальная строка скопируется один раз, зачем городить forward?
Второй код неправильный
источник

D

Danya in supapro.cxx
Там r-value reference, а не forwarding
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Erdem
а вот допустим чем отличаются эти коды:
class A {
public:
 A(string s) : value(move(s)) {}
private:
 string value;
};
и
class A {
public:
 A(string&& s) : value(forward<string>(s)) {}
private:
 string value;
};
ведь всё равно при вызове конструктора и там и там оригинальная строка скопируется один раз, зачем городить forward?
Второй код не позволяет писать
string s;
A a(s);
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Danya
Второй код неправильный
+, вместо форварда мув тогда уж
источник

D

Danya in supapro.cxx
Artöm Bakri Al-Sarmini
Ссылки, функции
Именно decltype(func) non-object type?
decltype(&func) норм же?
источник

E

Erdem in supapro.cxx
Побитый Кирпич
template<typename ... Types>
class Foo {
public:
 template <typename T>
 Foo(T&& t) : value(std::forward<T>(t)) {}
private:
 variant<Types ...> value;
};
а этот случай отличается чем-то от того что я только что писал? что если заменить на move?
источник

D

Danya in supapro.cxx
Erdem
а вот допустим чем отличаются эти коды:
class A {
public:
 A(string s) : value(move(s)) {}
private:
 string value;
};
и
class A {
public:
 A(string&& s) : value(forward<string>(s)) {}
private:
 string value;
};
ведь всё равно при вызове конструктора и там и там оригинальная строка скопируется один раз, зачем городить forward?
Почитай Майерса
Эффективный современный С++
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Danya
Именно decltype(func) non-object type?
decltype(&func) норм же?
Указатель на функцию это объект
источник

D

Danya in supapro.cxx
Erdem
а этот случай отличается чем-то от того что я только что писал? что если заменить на move?
Отличается
Он принимает только r-value ссылки на стрингу, в отличие от первого случая
источник

E

Erdem in supapro.cxx
Danya
Отличается
Он принимает только r-value ссылки на стрингу, в отличие от первого случая
template<typename ... Types>
class Foo {
public:
 template <typename T>
 Foo(T&& t) : value(std::forward<T>(t)) {}
private:
 variant<Types ...> value;
};
источник

E

Erdem in supapro.cxx
там ведь тоже самое написано, только T&& вместо string&&, какая разница?
источник

D

Danya in supapro.cxx
Erdem
там ведь тоже самое написано, только T&& вместо string&&, какая разница?
Ну в этом и смысл
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Danya
Хммм, что такое non-object types?

Template parameters
Types - the types that may be stored in this variant. All types must meet the Destructible requirements (in particular, array types and non-object types are not allowed).


https://en.cppreference.com/w/cpp/utility/variant
/cppref is_object
источник

F

FailsBot in supapro.cxx
источник

D

Danya in supapro.cxx
Erdem
там ведь тоже самое написано, только T&& вместо string&&, какая разница?
Тут конечно могут объяснить, но я считаю, что лучше Майерса почитать, а потом вопросы задать)
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Erdem
там ведь тоже самое написано, только T&& вместо string&&, какая разница?
Большая
источник