Программирование >>  Инициализация объектов класса, структура 

1 ... 49 50 51 [ 52 ] 53 54 55 ... 395


#include <cstddef> int ia[] = { 0, 1, 2 };

sizeof возвращает размер всего size t array size = sizeof ia;

массива

sizeof возвращает размер типа int size t element size = array size / sizeof( int );

Применение sizeof к массиву дает количество байтов, занимаемых массивом, а не количество его элементов и не размер в байтах каждого из них. Так, например, в системах, где int хранится в 4 байтах, значением array size будет 12. Применение

int *pi = new int[ 3 ];

sizeof к указателю дает размер самого указателя, а не объекта, на который он указывает:

size t pointer size = sizeof ( pi );

Здесь значением pointer size будет намять под указатель в байтах (4 в 32-битных системах), а не массива ia.

Вот пример программы, использующей оператор sizeof:



#include <string> #include <iostream> #include <cstddef>

int main() { size t ia;

ia = sizeof( ia ); правильно ia = sizeof ia; правильно

ia = sizeof int; ошибка ia = sizeof( int ); правильно

int *pi = new int[ 12 ];

cout << pi: << sizeof( pi )

<< *pi: << sizeof( pi )

<< endl;

sizeof строки не зависит от ее реальной длины string stl( foobar ); string st2( a mighty oak );

string *ps = sstl; cout

st1: << sizeof( st1 )

st2: << sizeof( st2 ) ps: sizeof( ps )

*ps: << sizeof( *ps )

endl;

cout << short :\t << sizeof(short) << endl;

cout << shorf :\t << sizeof(short*) << endl;

cout << shorts :\t << sizeof(shorts) << endl;

cout << short[3] :\t << sizeof(short[3]) << endl;

cout

Результатом работы программы будет:

pi: 4 *pi: 4

st1: 12 st2: 12 ps: 4 *ps:12

short : 2 short* : 4 shorts : 2

short[3] : 6

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

char size == 1

Гарантируется, что в любой реализации С++ размер типа char равен 1.

size t char size = sizeof( char );



правильно: константное важение

качестве размера встроенного массива. Например:

int array[ sizeof( some type T )];

4.9. Операторы new и delete

Каждая программа во время работы получает определенное количество памяти, которую можно использовать. Такое выделение памяти под объекты во время в1нолнения называется динамическим, а сама намять выделяется из хипа (heap). (Mi уже касались вопроса о динамическом выделении памяти в главе 1.) Напомним, что выделение памяти объекту производится с помощью оператора new, возвращающего указатель на вновь созданный объект того типа, который был ему задан. Например:

int *pi = new int;

размещает объект типа int в памяти и инициализирует указатель pi адресом этого объекта. Сам объект в таком случае не инициализируется, но это легко изменить:

int *pi = new int( 1024 ); Mожно динамически выделить намять под массив:

int *pia = new int[ 10 ];

Такая инструкция размещает в памяти массив встроенного типа из десяти элементов типа int. Для подобного массива нельзя задать список начальных значений его элементов при динамическом размещении. (Однако если размещается массив объектов типа класса, то для каждого из элементов вызывается конструктор но умолчанию.) Например:

string *ps = new string;

размещает в памяти один объект типа string, инициализирует ps его адресом и вызывает конструктор по умолчанию для вновь созданного объекта типа string. Аналогично

string *psa = new string[10];

размещает в памяти массив из десяти элементов типа string, инициализирует psa его адресом и вызывает конструктор по умолчанию для каждого элемента массива.

Объекты, размещаемые в памяти с помощью оператора new, не имеют собственного имени. Вместо этого возвращается указатель на безымянный объект, и все действия с этим объектом производятся посредством косвенной адресации.

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

Значение оператора sizeof вычисляется во время компиляции и считается константой. Оно может быть использовано везде, где требуется константное значение, в том числе в



1 ... 49 50 51 [ 52 ] 53 54 55 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика