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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.94
Дмитрий3.09
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 12
#1

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

19.12.2010, 01:29. Просмотров 4846. Ответов 10
Метки нет (Все метки)

Здравствуйте, Дамы и Господа!
Есть ли функция, передающая значение количества байт, отведенных в памяти для объекта класса?
Например для такого класса:
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++
2300 / 1670 / 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
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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     Как узнать размер объекта класса?
Еще ссылки по теме:
как узнать размер std::stringstream C++
Как узнать размер открытого файла C++
C++ Как узнать размер двумерного вектора?
C++ Как верно узнать размер указателя ?
Как узнать размер папки и её подкаталогов 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     Как узнать размер объекта класса?
Ответ Создать тему
Опции темы

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