Форум программистов, компьютерный форум CyberForum.ru

Как узнать размер объекта класса? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.94
Дмитрий3.09
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 12
19.12.2010, 01:29     Как узнать размер объекта класса? #1
Здравствуйте, Дамы и Господа!
Есть ли функция, передающая значение количества байт, отведенных в памяти для объекта класса?
Например для такого класса:
C++
1
2
3
4
5
6
7
8
9
10
class mas
{
     int *a;
public:
     int *f()
     {
            a=new int[10];
            return a;
     }
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
19.12.2010, 01:31     Как узнать размер объекта класса? #2
sizeof() ?
Дмитрий3.09
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 12
19.12.2010, 01:39  [ТС]     Как узнать размер объекта класса? #3
Так?
C++
1
2
3
4
5
6
7
8
void _tmain(int argc, _TCHAR* argv[])
{
    mas s;
        s.f();
    int t=sizeof(s);
    cout<<t<<endl;
    _getch();
}
пишет 4
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
19.12.2010, 01:44     Как узнать размер объекта класса? #4
Дмитрий3.09, все верно.
Дмитрий3.09
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 12
19.12.2010, 01:46  [ТС]     Как узнать размер объекта класса? #5
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
все верно.
Но ведь объект создается с вектором "а" который состоит из десяти элементов типа int... по-моему должно быть как минимум 80 байт... почему 4 пишет?
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
19.12.2010, 01:52     Как узнать размер объекта класса? #6
Цитата Сообщение от Дмитрий3.09 Посмотреть сообщение
Но ведь объект создается с вектором "а" который состоит из десяти элементов типа int... по-моему должно быть как минимум 80 байт... почему 4 пишет?
Потому что содержимое объекта не сам вектор(массив наверное на самом деле?), а лишь указатель на него.
Вы не предусмотрели в объекте места для массива, только для указателя.
Дмитрий3.09
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 12
19.12.2010, 01:55  [ТС]     Как узнать размер объекта класса? #7
а как в таком случае предусмотреть в объекте места для динамического массива?
lemegeton
 Аватар для lemegeton
2913 / 1342 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
19.12.2010, 02:02     Как узнать размер объекта класса? #8
Если вы имеете в виду, что доступ к той же области памяти можно получить извне класса, то да.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class mas
{
     int *a;
public:
     int *f()
     {
            a=new int[10];
            return a;
     }
};
 
int main()
{
     mas m;
     int *a = m.f();
     // a == m.a
}
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
19.12.2010, 02:05     Как узнать размер объекта класса? #9
Цитата Сообщение от Дмитрий3.09 Посмотреть сообщение
а как в таком случае предусмотреть в объекте места для динамического массива?
В том виде как вы это сейчас говорите - никак.
В C/C++ статическая типизация, размер всех объектов должен быть известен на этапе компиляции.
Дмитрий3.09
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 12
19.12.2010, 02:17  [ТС]     Как узнать размер объекта класса? #10
Тогда можете подсказать, как узнать размер объекта? Идея в том, что должна быть еще одна функция-член (допустим f2()), которая "изучает" этот массив и изменяет его размер в случае необходимости. Размер объекта не должен превышать определённых значений.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2010, 02:22     Как узнать размер объекта класса?
Еще ссылки по теме:

C++ Как верно узнать размер указателя ?
Как узнать размер открытого файла C++
C++ Как узнать размер массива?
как узнать размер строки? C++
Как в классе А у объекта класса B вызвать метод класса B ? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
19.12.2010, 02:22     Как узнать размер объекта класса? #11
Цитата Сообщение от Дмитрий3.09 Посмотреть сообщение
Тогда можете подсказать, как узнать размер объекта? Идея в том, что должна быть еще одна функция-член (допустим f2()), которая "изучает" этот массив и изменяет его размер в случае необходимости. Размер объекта не должен превышать определённых значений.
Ну так сохраняйте число элементов в момент присваивания.
А потом возвращайте (sizeof(Object) + N * sizeof(type)).

На всякий случай: Вы не можете знать где именно в памяти будет находиться массив.
Он не будет рядом с объектом.
Yandex
Объявления
19.12.2010, 02:22     Как узнать размер объекта класса?
Ответ Создать тему
Опции темы

Текущее время: 09:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru