2011-12-26 8 views
1

オブジェクトの動的サイズを知る方法はありますか?オブジェクトの動的サイズ[C++で]

私は実行中にサイズを増やすことができるオブジェクトをいくつか持っており、それを監視したいと考えています。

私は

はありませんがあり、事前に

+0

ベクトルはしませんか? –

答えて

4

をありがとう...それは動的オブジェクトと、それはそのオブジェクトの実際のメモリ使用量を返すことに使用できること(のsizeofのようないくつかの方法を必要とする)が、言語によって提供されるそのような内蔵機能。
言語が提供する構造体は、サイズを知る必要はなく、言語のユーザーはそのサイズから抽象化されます。
あなたがそれを必要とする場合あなたはあなた自身でそれを追跡しなければなりません。

+0

実際には存在しないかもしれません。時にはデータが異なるオブジェクト間で共有されていて、そのデータが正確に – valdo

+0

@valdoであることを示すのとは異なります。おそらく、それを追跡するのは複雑かもしれませんが、[Copy on Write(COW)](http:// en.wikipedia.org/wiki/Copy-on-write)、コンパイラはこれを適切に処理します。 –

1

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; 
} 
1

オブジェクトは「自分のサイズを増やす」というコンセプトのために独自のロジックを制御するようだけで、彼らはまた、「ダイナミックなサイズを返す」ために独自のロジックを制御する必要があります。 C++言語自体は、あなたが話している方法で「オブジェクトサイズを大きくする」ことが何を意味するのか理解していません。

明らかな例が既に掲載されています。std::vectorは、.size()メソッドを提供します。これはC++構文の一部として提供されていません。それはランタイム関数です。

関連する問題