powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / type-rich инициализация
74 сообщений из 74, показаны все 3 страниц
type-rich инициализация
    #39887258
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то не догоню (опять на ночь глядя), как проинициализировать такое:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
struct Test
{
    int i;
};

struct S
{
    int a,b;
    Test t;
};

int main()
{
    vector<S> s;
    s.push_back({1,2, Test{5}});
// error: no matching function for call to ‘std::vector<S>::push_back(<brace-enclosed initializer list>)’
// и так тоже не:
    s.push_back({1,2, 5});
// а так да (если из S Test убрать):
    s.push_back({1,2});
}


ЧЯДНТ?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887260
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

Должно работать. И так тоже должно:
Код: plaintext
1.
	s.push_back({ 1,2, {5} });
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887262
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

древний конпилятор!
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887420
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, блин, что C++17 нужен же
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887502
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
полудух,

древний конпилятор!
gcc компилирует с С++11 без проблем
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887693
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня g++ v6 не компилировал
v8.3 - ok
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887756
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а тоже самое, но в таком виде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
struct Test
{
    int i;
};

struct S_in
{
    int a,b;
};

struct S : S_in
{
    Test t;
};


выдаёт такую же ошибку...
вроде в S должен получиться такой же набор: a,b,i
ан нет... что-то ему не нравится
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887771
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
а тоже самое, но в таком виде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
struct Test
{
    int i;
};

struct S_in
{
    int a,b;
};

struct S : S_in
{
    Test t;
};



выдаёт такую же ошибку...
вроде в S должен получиться такой же набор: a,b,i
ан нет... что-то ему не нравится

Вгде "такая же" ошибка?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887772
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

MS VS 2017, C++ Langusge Standard: ISO C++17 Standard (/std:c++17)
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887773
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

mingw 8.2.0, если set(CMAKE_CXX_STANDARD 17)

- тоже "всё работает".
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887774
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот сук, ему -std=c++1z надо было дать
а если наследование убрать, то и без работает
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887813
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
вот сук, ему -std=c++1z надо было...


C++ 11 = > C++1x
C++ 14 = > C++1y
C++ 17 = > C++1z
...
C++ 20 => C++2a :)
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888204
Z axis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
вот сук, ему -std=c++1z надо было дать
а если наследование убрать, то и без работает
Ну, это неудивительно. До C++17 агрегат вообще не мог иметь базовых классов.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888223
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чего не мог иметь?
может наследоваться не мог?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888270
Z axis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
чего не мог иметь?
может наследоваться не мог?
В чём разница с тем, что сказал я?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888305
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в терминологии запутался
я привык их называть "родительский класс"
а "агрегатом" классы вообще никто не называет
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888306
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
полудух
вот сук, ему -std=c++1z надо было...


C++ 11 = > C++1x
C++ 14 = > C++1y
C++ 17 = > C++1z
...
C++ 20 => C++2a :)

остаётся только гадать, почему нельзя было назвать c++14, c++17
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888307
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

чтобы духи лажали....
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888325
vAH_O6Vg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полудух
остаётся только гадать, почему нельзя было назвать c++14, c++17

Потому что это разные режимы компиляции. Буквенные стандарты - это частичная реализация черновиков новых стандартов. Стандарт двадцатого года ещё дописывается, а -std=c++2a уже есть. Для уже вышедших и полностью реализованных нужно писать -std=c++17, -std=c++14 и т.д.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888342
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок.
тем временем, я нашёл новый косяк

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
struct Test
{
    int i;
};

struct S_in
{
    vector<int> z;
    int a,b;
};

struct S : S_in
{
    vector<int> y;
    Test t;
    vector<int> bb;
};

int main()
{
    vector<S> s;
    s.push_back({vector<int>{345},1,2, {22}, Test{"abc",5}, {5,6,12}});
}


{345} НЕ работает без vector<int>, хотя и "y", и "bb" без проблем добавляются...
error: no matching function for call to ‘std::vector<S>::push_back(<brace-enclosed initializer list>)’
...
Рейтинг: 0 / 0
type-rich инициализация
    #39890745
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не пойму, что не клеится...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
struct Slova
{
    string w1, w2;
};

int main()
{
    vector<Slova> *v;
    vector<Slova> v1 {{"Слово1", "Слово2"},   {"Слово3", "Слово4"}};
    vector<Slova> v2 {{"Дело1", "Дело2"},   {"Дело3", "Дело4"}};

    // я хочу, чтобы v получал v1 ЛИБО v2 (каждый раз будет выбираться новый), и чтобы получал по ссылке
    // move() тут не годится, т.к. v1 и v2 должны выжить для будущих подключений.
    // пытаюсь сделать так:
    vector<Slova> *v = &v1;
    // и так:
    v = &v1;

    // но на попытку:
    cout << *v[1].w1 << endl;
    // выгребаю: error: ‘class std::vector<ent::Slova>’ has no member named ‘w1’
    // (тоже самое и без *)

    // НО вот так всё ок:
    for (auto &s : *v)
        {cout << s.w1 << endl;} // шо за?!

}
...
Рейтинг: 0 / 0
type-rich инициализация
    #39890786
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так тоже ок:
cout << v1[1].w1 << endl;
...
Рейтинг: 0 / 0
type-rich инициализация
    #39890811
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

Код: plaintext
1.
(*v)[1].w1
...
Рейтинг: 0 / 0
type-rich инициализация
    #39890816
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а
Код: plaintext
1.
*v[1].w1


означает
Код: plaintext
1.
*((*(v+1)).w1)
...
Рейтинг: 0 / 0
type-rich инициализация
    #39890823
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
охх...
а что означают все эти скобочки? (где-то там кроется dereferencing, я полагаю)
зачем надо было так усложнять то, голову же сломать можно


и ведь это единственный правильный способ по ссылке привязать?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39890825
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у обычных кстати нет таких заморочек:
Код: plaintext
1.
2.
3.
4.
    int *a;
    int b = 5;
    a = &b;
    cout << *a << endl;
...
Рейтинг: 0 / 0
type-rich инициализация
    #39892578
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct Ball
{
    int size;
    int color;
    string name;

    void set_size(int sz)    {size = sz;}
};



когда я делаю:
Код: plaintext
1.
vector<Ball> {{5,6,"круглый"}, {1,2,"шерстяной"}, {8,2,"tar"}};


у меня ф-я поедет во все объекты и увеличит их ВСЕ или как?
а если её static сделать?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39892632
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
у меня ф-я поедет во все объекты и увеличит их ВСЕ или как?
а если её static сделать?

Нет. В объекте не хранятся указатели на его функции.
Это обычные функции с дополнительным аргументом равным указателю на объект. Вызов через `.` - просто синтаксический сахар.

Если есть виртуальные функции, то в объекте еще хранится указатель на таблицу виртуальных функций, но не на сами функции.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39892643
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ясно, спасибо.
В Core Guidelines топят за то, чтобы класс содержал как можно меньше ф-й
что сами ф-и надо выносить наружу, как "helper functions"
авторC.4: Make a function a member only if it needs direct access to the representation of a class
хотя в vector все ф-и внутри класса... Или они уже потом CG сочиняли и вектор не успели ещё переделать, или я чего-то не понял...
...
Рейтинг: 0 / 0
type-rich инициализация
    #39892673
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

есть книжка: С++17 STL. Стандартная библиотека шаблонов. Автор:Яцек Галовиц

В .pdf доступна, если не найдешь - могу скинуть. Там расписано.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39892727
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,
Вектор это контейнер цепочки объектов.
Надо ли объект делать не просто структурой а ещё и умной, с методами, зависит от бизнес логики.
Удобства программиста.
Моделирования.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39892893
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух

В Core Guidelines топят за то, чтобы класс содержал как можно меньше ф-й
что сами ф-и надо выносить наружу, как "helper functions"

хотя в vector все ф-и внутри класса... Или они уже потом CG сочиняли и вектор не успели ещё переделать, или я чего-то не понял...


Если функция - часть публичного API класса, то она вполне уместна в самом классе.
А есть это реализаия деталей в private то ее вполне можно вынести из класса и спрятать в .cpp. Но только если это не усложнит программу. Например если в классе много полей, с которыми работает функция, то придется все это передавать в арументах, что затруднит чтение (да и написание) такого кода.

А вообще чем меньше функций в классе тем быстрее компилируется, т.к. меньше зависимостей между модулями. Это скорее всего и была основная причина для появления данного пункта в гиде.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39892907
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
чем меньше функций в классе тем быстрее компилируется,
и тем глупее классы по ООП.
Извечная дилемма.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893041
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Anatoly Moskovsky
чем меньше функций в классе тем быстрее компилируется,
и тем глупее классы по ООП.
Извечная дилемма.

нет там дилеммы, в CG отдельно прописаны инварианты - если они есть, то должны быть внутри класса
А если нет, то вот такие ф-и, которые НЕ проверяют инварианты и НЕ работают с приватами, походу они отлетают наружу в helper functions, которые лежат в том же неймспейсе
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893049
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
полудух,

есть книжка: С++17 STL. Стандартная библиотека шаблонов. Автор:Яцек Галовиц

В .pdf доступна, если не найдешь - могу скинуть. Там расписано.

нашёл английскую 2018 года
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893085
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
нашёл английскую 2018 года

"C++17 STL by Jacek Galowicz" в 2018 не было.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893093
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да она
значит 2е издание
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893110
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
PetroNotC Sharp
пропущено...
и тем глупее классы по ООП.
Извечная дилемма.

нет там дилеммы, в CG отдельно прописаны инварианты - если они есть, то должны быть внутри класса
А если нет, то вот такие ф-и, которые НЕ проверяют инварианты и НЕ работают с приватами, походу они отлетают наружу в helper functions, которые лежат в том же неймспейсе

Если бы не было дилеммы то не было бы топика).
Мне больше нравится вот эта дорожная карта:
Anatoly Moskovsky
Если функция - часть публичного API класса, то она вполне уместна в самом классе.

То есть эти методы известны в классе еще задолго до private..
...
Ну, а если вы передаете их куда то в веб, то передают Data transfer object (DTO) или Value object (VO) уже вообще без функций.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893269
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а посчитать размеры полей в структуре и умножить на кол-во структур в векторе это единственный правильный способ узнать полный размер в памяти?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893315
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
а посчитать размеры полей в структуре и умножить на кол-во структур в векторе это единственный правильный способ узнать полный размер в памяти?

Этот способ - один из неправильных. Примерно как подсчет объема абстрактного хранилища для картошки методом умножения объема одной картошки на ее количество в данный момент. Ты получишь "объем как минимум", всего лишь.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893384
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чтобы узнать как правильно, надо второй раз спрашивать чтоли
или это секрет
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893391
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
а посчитать размеры полей в структуре и умножить на кол-во структур в векторе это единственный правильный способ узнать полный размер в памяти?

A) если простой объект - sizeof
B) если сложный то никак не узнать
С) в отладчике или профайлере в рантайм.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893422
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
B) если сложный то никак не узнать


ну ок, пусть профайлер...
а MSVS, например, разве не показывает размеры ?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893474
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
а MSVS, например, разве не показывает размеры ?
вверху код. Сколько показал в граммах?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893476
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
Код: plaintext
1.
vector<Ball> {{5,6,"круглый"}, {1,2,"шерстяной"}, {8,2,"tar"}};

если строки по 5000 символов, то сколько размер?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893481
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не моя задача - считать
я для этого компьютер купил
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893489
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но на вскидку можно сказать, что 15024
не понятно, в чём сложность то ему посчитать...
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893500
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
не понятно, в чём сложность то ему посчитать...

Кому "ему"?
Что, менеджер памяти должен вести учет по каждому классу?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893503
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
любой ф-и: sizeof(), или size(), или .size()
непонятно, в чём сложность то пробежаться по вектору и посчитать заполненные поля в структурах...
почему:
PetroNotC Sharp
B) если сложный то никак не узнать
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893521
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,
Я говорил про указатели в первую очередь.
Как тут считать?
Зависимости.
Вот я одну либо загрузил, а она из за зависимостей 205 либ загрузила.
Второй вопрос, кому это надо?
Проге надо память, она просит у операционки.
А заранее знать занафига?))
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893524
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
чём сложность то ему посчитать...
сборщик мусора все считает и ему это удается.
А программист... Не царское это дело (с)
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893629
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
А заранее знать занафига?))

да не заранее
ты пишешь, что вообще никак не узнать
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893639
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухнепонятно, в чём сложность то пробежаться по вектору и посчитать заполненные поля в
структурах...

Это даст тебе объём картошки. Просранное свободное место в пуле ты так не почитаешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893648
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
PetroNotC Sharp
А заранее знать занафига?))

да не заранее
ты пишешь, что вообще никак не узнать
вот ведь дискус)).
Дал три варианта на все случаи жизни.
Для третичной логики
А, В и С.
Они охватывают все варианты в жизни. Рантайм это вариант С.
Дак нет же, опять все не так).
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893656
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
полудухнепонятно, в чём сложность то пробежаться по вектору и посчитать заполненные поля в
структурах...

Это даст тебе объём картошки. Просранное свободное место в пуле ты так не почитаешь.
если физически пройти по вектору и в каждой структуре чекнуть - сколько в поле байт
PetroNotC Sharp
Дак нет же, опять все не так).

слово "никак" было лишним
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893657
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
если физически пройти по вектору и в каждой структуре чекнуть - сколько в поле байт

= физически пробежать по памяти и в каждой ячейке чекнуть - сколько там байт
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893663
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,
PetroNotC Sharp
полудух
а посчитать размеры полей в структуре и умножить на кол-во структур в векторе это единственный правильный способ узнать полный размер в памяти?

A) если простой объект - sizeof
B) если сложный то никак не узнать
С) в отладчике или профайлере в рантайм.

Ну тогда рассказывай, как в B) вычислять размер объекта если в нем ссылки на другие объекты.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893674
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

предположим, что ты создал и залил данные в вектор.
И ты как-то зафиксировал объем используемой памяти до и после и вычел второе из первого. И что? Это все равно не будет "объемом, занимаемым вектором". И даже не факт, что величина будет положительной.
...
Скажи, ну вот зачем тебе это надо?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893686
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
полудух,
PetroNotC Sharp
пропущено...

A) если простой объект - sizeof
B) если сложный то никак не узнать
С) в отладчике или профайлере в рантайм.

Ну тогда рассказывай, как в B) вычислять размер объекта если в нем ссылки на другие объекты.

а что ссылка это тупик чтоли, это же адрес в памяти
по этому адресу можно найти объект, осталось посчитать кол-во байт в каждом члене объекта
ёёёёё
полудух,

предположим, что ты создал и залил данные в вектор.
И ты как-то зафиксировал объем используемой памяти до и после и вычел второе из первого. И что? Это все равно не будет "объемом, занимаемым вектором". И даже не факт, что величина будет положительной.

а зачем "до и после"? Конечно это не будет "объёмом, занимаемым вектором"...
надо прочекать ячейку в памяти каждого члена класса и посчитать кол-во байт в ней
для всех классов в векторе
только и всего
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893695
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
а что ссылка это тупик чтоли, это же адрес в памяти
по этому адресу можно найти объект, осталось посчитать кол-во байт в каждом члене объекта

ты же не джун чтобы такой болтовнёй заниматься.
Сначала попробуй, а потом говори.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893696
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в C++ - джун

как я попробую, если я тут спрашиваю "как это сделать"
что, нельзя посчитать кол-во байт в ячейке?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893708
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧТО может пойти не так?!

YouTube Video
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893743
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
как я попробую, если я тут спрашиваю "как это сделать"
не так. Я говорю нельзя, а ты говоришь слово лишнее).
- как обходить зависимости (дерево или циклические зависимости) будешь? Рекурсией?
- как определишь что указатель на инициализированный объект а не пустышка?
И т.д.
Лучше выбрось из головы странную задачу.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893838
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что в ней странного то? есть вектор объектов и я хочу знать его размер в памяти.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893840
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
- как определишь что указатель на инициализированный объект а не пустышка?

по заветам Страуса - конструктор всё проинициализирует
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893874
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
что в ней странного то? есть вектор объектов и я хочу знать его размер в памяти.

"босиком по лужам" Почему?
Ответ - Что странного? Хочу босиком по лужам!

полудух
PetroNotC Sharp
- как определишь что указатель на инициализированный объект а не пустышка?

по заветам Страуса - конструктор всё проинициализирует

Вопрос был как считать указатели?
class A
{
Settings *settings;
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893884
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну а если без указателей
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893885
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
по заветам Страуса - конструктор всё проинициализирует

Не всё?
class A
{
std::unique_ptr<FileBitmap> file{};
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893889
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
ну а если без указателей
см выше вариант А. Это не сложный случай.
А мы отвлеклись на лишнее слово "нельзя".
...
Рейтинг: 0 / 0
type-rich инициализация
    #39893919
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
что в ней странного то? есть вектор объектов и я хочу знать его размер в памяти.

Точно нельзя сказать, но для std::vector примерно так:
Код: plaintext
1.
2.
// v - экземпляр std::vector
mem_size = sizeof(v) + v.size() * sizeof(v[0]);



Для других контейнеров - по-другому
...
Рейтинг: 0 / 0
type-rich инициализация
    #39894201
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и какой прок от sizeof(obj)?
он вообще не несёт реальной инфы об объекте в памяти, там даже цифра не меняется

в общем надо дергать вручную каждое поле и складывать их все
и каждый стринг всё равно считать через .size()
...
Рейтинг: 0 / 0
type-rich инициализация
    #39894209
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
каждый стринг всё равно считать через .size()

И все равно не правильно будет.
А как правильно - никто не скажет, потому что никому это не нужно.
Как не нужно и тебе.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39894221
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему не правильно?
Код: plaintext
1.
2.
3.
    string str1 {"I'm string of 23 bytes."};
    string str2 {"А я стринг на 36 байт."};
    printf("str1: %d, str2: %d\n", str1.size(), str2.size());


всё правильно до байта
и безо всяких \0
...
Рейтинг: 0 / 0
type-rich инициализация
    #39894389
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

Естественно, если вектор содержит объекты с динамической памятью, то размеры элементов нужно считать аналогичным образом в зависимости от конкретного типа.

Еще нужно учитывать, что объекты типа vector string обычно выделяют память с запасом.
...
Рейтинг: 0 / 0
74 сообщений из 74, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / type-rich инициализация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]