Динамический размер объекта [в C ++] - PullRequest
1 голос
/ 26 декабря 2011

Есть ли способ узнать динамический размер объекта?

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

Мне нужен какой-то метод, например sizeof (), но он может использоваться с динамическим объектом и возвращает фактическое использование памяти для этого объекта.

Заранее спасибо,

Ответы [ 3 ]

4 голосов
/ 26 декабря 2011

Нет такой встроенной функции, предоставляемой языком.
Конструкции, которые предоставляет langauge, не должны знать размер как таковой, и пользователь языка абстрагируется от него.
В случае, если вам все еще это нужно, вам придется следить за этим самостоятельно.

1 голос
/ 26 декабря 2011

Так же, как объекты управляют своей собственной логикой для концепции «увеличения их размера», они также должны управлять своей собственной логикой для «возврата динамического размера».Сам язык C ++ не понимает, что означает «увеличение размера объекта» в том смысле, о котором вы говорите.

Очевидный пример уже был опубликован: std::vector предоставляет метод .size().Он не предоставляется как часть синтаксиса C ++;это функция времени выполнения.

1 голос
/ 26 декабря 2011

A vector - это динамический контейнер для любого типа данных. Использование: std::vector <data_type> my_variable;

Например: vector <int> my_int_Vec; для объявления вектора типа int.

Используйте vector::size, чтобы узнать количество элементов, содержащихся в векторе.

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

#include <vector>
#include <iostream>
using namespace std;

int main( )
{

    vector <int> my_int_Vec;
    vector <int>::size_type Size_my_int_Vec, Capacity_my_int_Vec;

    my_int_Vec.push_back( 1 );
    Size_my_int_Vec = my_int_Vec.size( );
    Capacity_my_int_Vec = my_int_Vec.capacity( );

    cout << "Vector contains " << Size_my_int_Vec  << " elements." << endl;
    cout << "Vector size  is " << Size_my_int_Vec * sizeof(int) << " bytes.\n" << endl;
    cout << "Vector capacity  is " << Capacity_my_int_Vec * sizeof(int) << " bytes.\n" << endl;    
return 0;
}
...