Size: a a a

2020 July 25

d

disba1ancer in supapro.cxx
/bin/cat
c++filt не знает ничего про default
это можно определить только косвенными признаками
источник

d

disba1ancer in supapro.cxx
один из них полное отсутствие каких-либо конструкторов
источник

ip

illya palkin in supapro.cxx
std::slavik
то есть move если не может обеспечить перемещение - делает копирование?
struct Foo
{
   int values[100];
   bool flagA;
   bool flagB;
};

struct Bar
{
   Foo foo1;
   Foo foo2;
};

int main()
{
   Foo f;
   Foo fCopy = std::move(f);
   Bar b;
   Bar bCopy = std::move(b);
   return 0;
}

In the case of both Foo and Bar there is no meaningful way to move the data from one to another because both are ultimately aggregates of POD types - none of their data is indirectly owned (points to or references other memory). So in these cases, the move is implemented as a copy and originals (f, b) remain unaltered after the assignments on the std::move() lines.

Move semantics can only be meaningfully implemented with dynamically allocated memory or unique resources.
источник
2020 July 26

ip

illya palkin in supapro.cxx
Здесь когда-то спрашивали почему такой код работает, уже не помню почему

struct A {};

A f() {
   return {};
}

int main() {
   A b;
   f() = b; // ?
}
источник

AS

Anatoly Shirokov in supapro.cxx
illya palkin
Здесь когда-то спрашивали почему такой код работает, уже не помню почему

struct A {};

A f() {
   return {};
}

int main() {
   A b;
   f() = b; // ?
}
работает по той же причине, что и вызов любого другого метода временного объекта
источник

ip

illya palkin in supapro.cxx
Anatoly Shirokov
работает по той же причине, что и вызов любого другого метода временного объекта
Т.е. это вот так можно переписать f().operator=(b); ?
источник

AS

Anatoly Shirokov in supapro.cxx
illya palkin
Т.е. это вот так можно переписать f().operator=(b); ?
да
источник

VV

Valera Valakas in supapro.cxx
Товарищи, всем привет!
Не подскажите почему крашится при вызове деструктора для v4?
https://pastebin.com/s9jbfYne

Для больших строк(где, видимо, нет SSO) деструктор работает нормально, а вот для маленьких программа падает.
источник

AS

Anatoly Shirokov in supapro.cxx
Valera Valakas
Товарищи, всем привет!
Не подскажите почему крашится при вызове деструктора для v4?
https://pastebin.com/s9jbfYne

Для больших строк(где, видимо, нет SSO) деструктор работает нормально, а вот для маленьких программа падает.
memcpy(new_space, data_, sizeof(T) * size_);
источник

D

Dmitriy in supapro.cxx
Valera Valakas
Товарищи, всем привет!
Не подскажите почему крашится при вызове деструктора для v4?
https://pastebin.com/s9jbfYne

Для больших строк(где, видимо, нет SSO) деструктор работает нормально, а вот для маленьких программа падает.
Нельзя копировать сложные объекты (с нетривиальным конструктором копирования) через memcpy😄
источник

VV

Valera Valakas in supapro.cxx
Dmitriy
Нельзя копировать сложные объекты (с нетривиальным конструктором копирования) через memcpy😄
Но я не хочу копировать каждый нетривиальный объект при каждой реаллокации вектора. Я хочу просто копировать указатель и всё.
источник

AS

Anatoly Shirokov in supapro.cxx
Valera Valakas
Но я не хочу копировать каждый нетривиальный объект при каждой реаллокации вектора. Я хочу просто копировать указатель и всё.
подумай над корректным перемещением с одного участка памяти в другой через placement new и конструктор перемещения (копии, если перемещение невозможно)
источник

AS

Anatoly Shirokov in supapro.cxx
или просто загляни в какую-нибудь реализацию std::vector
источник

VV

Valera Valakas in supapro.cxx
Anatoly Shirokov
или просто загляни в какую-нибудь реализацию std::vector
Ок, спасибо за помощь!
источник

s

std::slavik in supapro.cxx
illya palkin
struct Foo
{
   int values[100];
   bool flagA;
   bool flagB;
};

struct Bar
{
   Foo foo1;
   Foo foo2;
};

int main()
{
   Foo f;
   Foo fCopy = std::move(f);
   Bar b;
   Bar bCopy = std::move(b);
   return 0;
}

In the case of both Foo and Bar there is no meaningful way to move the data from one to another because both are ultimately aggregates of POD types - none of their data is indirectly owned (points to or references other memory). So in these cases, the move is implemented as a copy and originals (f, b) remain unaltered after the assignments on the std::move() lines.

Move semantics can only be meaningfully implemented with dynamically allocated memory or unique resources.
спасиб
источник

D

Dmitriy in supapro.cxx
Valera Valakas
Но я не хочу копировать каждый нетривиальный объект при каждой реаллокации вектора. Я хочу просто копировать указатель и всё.
А если в объекте хранятся указатели на собственные поля?
источник

VV

Valera Valakas in supapro.cxx
Dmitriy
А если в объекте хранятся указатели на собственные поля?
Будет провал. Спасибо!
источник

d

dpytaylo in supapro.cxx
/about@CodeDetectorBot
источник

s

std::slavik in supapro.cxx
предлагаю на нормальный язык переписать)
источник

/

/dev/desider in supapro.cxx
Может кому пригодятся примеры из книги Праты в текстовом формате https://github.com/TylerBrock/books/tree/master/C%2B%2B%20Primer%20Plus/listings
источник