pajofego
2007-11-14, 00:10:54
Guten Abend zusammen.
Ich versuche mich gerade einige Teile von TList aus Delphi in C++ anzuwenden.
Es geht dabei um folgenden Codeabschnitt in TList:
MaxListSize = Maxint div 16;
...
PPointerList = ^TPointerList;
TPointerList = array[0..MaxListSize - 1] of Pointer;
...
function TList.Add(Item: Pointer): Integer;
begin
Result := FCount;
if Result = FCapacity then
Grow;
FList^[Result] := Item;
...
end;
Ich habe nur erst einmal den für mich relevanten Codeabschnitt dargestellt. Das ganze habe ich in C++ in Form einer Template Klasse wie versucht darzustellen:
#include <climits>
#include <stdlib.h>
#include <stdio.h>
template <class T>
class TList
{
public:
TList();
~TList();
int Add(T *Item);
void Grow();
private:
T** m_pList;
int m_lCount;
int m_lCapacity;
};
template <class T> TList<T>::TList()
{
m_pList = new T* [INT_MAX / 16 - 1];
m_lCount = 0;
m_lCapacity = 0;
return;
}
template <class T> TList<T>::~TList()
{
assert(NULL == m_pList);
assert(0 == m_lCount);
return;
}
template <class T>
int TList<T>::Add(T *Item)
{
if (m_lCount == m_lCapacity)
Grow();
m_pList[m_lCount] = Item;
return m_lCount++;
}
template <class T> void TList<T>::Grow()
{
m_lCapacity++;
}
Soweit scheint die Methode Add in C++ zu funktionieren. Wenn ich im Taskmanager auf den Verlauf der Auslagerungsdatei anschaue sobald ich irgendwo in mein Code z.B. folgende Anweisung durchführe:
TList<double> myList;
myList.Add(&a);
steigt der Wert der Auslagerungsdatei um ca. 0.5 GB an. Der Wert in der Prozessliste bleibt solange ich keine allzu große Anzahl an Werte übergebe gleich. In Delphi sehe ich diese Phänomen nicht. Daher meine Frage ob der von mir gegangene Weg wie oben dargestellt überhaupt der gleiche ist wie der in Delphi. Insbesondere der Datentyp Pointer wirft einige Fragen auf. D.h. wie setzt man soetwas konkret in C++ um?
Danke,
Gruß
pajofego
Ich versuche mich gerade einige Teile von TList aus Delphi in C++ anzuwenden.
Es geht dabei um folgenden Codeabschnitt in TList:
MaxListSize = Maxint div 16;
...
PPointerList = ^TPointerList;
TPointerList = array[0..MaxListSize - 1] of Pointer;
...
function TList.Add(Item: Pointer): Integer;
begin
Result := FCount;
if Result = FCapacity then
Grow;
FList^[Result] := Item;
...
end;
Ich habe nur erst einmal den für mich relevanten Codeabschnitt dargestellt. Das ganze habe ich in C++ in Form einer Template Klasse wie versucht darzustellen:
#include <climits>
#include <stdlib.h>
#include <stdio.h>
template <class T>
class TList
{
public:
TList();
~TList();
int Add(T *Item);
void Grow();
private:
T** m_pList;
int m_lCount;
int m_lCapacity;
};
template <class T> TList<T>::TList()
{
m_pList = new T* [INT_MAX / 16 - 1];
m_lCount = 0;
m_lCapacity = 0;
return;
}
template <class T> TList<T>::~TList()
{
assert(NULL == m_pList);
assert(0 == m_lCount);
return;
}
template <class T>
int TList<T>::Add(T *Item)
{
if (m_lCount == m_lCapacity)
Grow();
m_pList[m_lCount] = Item;
return m_lCount++;
}
template <class T> void TList<T>::Grow()
{
m_lCapacity++;
}
Soweit scheint die Methode Add in C++ zu funktionieren. Wenn ich im Taskmanager auf den Verlauf der Auslagerungsdatei anschaue sobald ich irgendwo in mein Code z.B. folgende Anweisung durchführe:
TList<double> myList;
myList.Add(&a);
steigt der Wert der Auslagerungsdatei um ca. 0.5 GB an. Der Wert in der Prozessliste bleibt solange ich keine allzu große Anzahl an Werte übergebe gleich. In Delphi sehe ich diese Phänomen nicht. Daher meine Frage ob der von mir gegangene Weg wie oben dargestellt überhaupt der gleiche ist wie der in Delphi. Insbesondere der Datentyp Pointer wirft einige Fragen auf. D.h. wie setzt man soetwas konkret in C++ um?
Danke,
Gruß
pajofego