PDA

View Full Version : heap-py object? :)


Hans Andersen
Mar 2, 2002, 12:33
define a class in C++, with a method
bool onHeap() const;
which returns true iff the object was created on heap.

ladies and gentlemen, your elegant classes are welcome <img src="smooch-1.gif" border="0">

Aram Hambardzumyan
Mar 3, 2002, 19:04
<blockquote><font size="1" face="MS Sans Serif, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Hans Andersen:
define a class in C++, with a method
bool onHeap() const;
which returns true iff the object was created on heap.

ladies and gentlemen, your elegant classes are welcome <img src="smooch-1.gif" border="0"> <hr></blockquote>

но зачем?!?

Hans Andersen
Mar 4, 2002, 09:58
amen inch chi vor 'zachemov' a <img src="smooch-1.gif" border="0">

greka
Mar 4, 2002, 17:30
of course you have to call API
function "bool IsDataOnHeap(const void*)"
<img src="wink-5.gif" border="0">

I think that we have to find out the address of process's heap(-s) and walk by them, comparing address of the object with the range of that heap spaces.

h-m... <img src="smooch-1.gif" border="0"> ?

Aram Hambardzumyan
Mar 4, 2002, 20:04
<blockquote><font size="1" face="MS Sans Serif, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Greco El:
of course you have to call API
function "bool IsDataOnHeap(const void*)"
<hr></blockquote>

no, it seems that standard language features are to be used only <img src="smooch-1.gif" border="0"> this has been discussed by mayers

Taurus
Mar 4, 2002, 23:17
class A{
bool IsInHeap;
public:
A():IsInHeap(false){}
bool OnHeap(){return IsInHeap;}
void* operator new(size_t size)
{
IsInHeap=true;
...
}
};

Taurus
Mar 4, 2002, 23:23
class A{
public:
bool OnHeap(){return true;}
private:
~A(){}
};
<img src="smooch-1.gif" border="0"> <img src="smooch-1.gif" border="0"> <img src="smooch-1.gif" border="0"> <img src="smooch-1.gif" border="0"> <img src="biggrin2.gif" border="0">

Aram Hambardzumyan
Mar 5, 2002, 00:28
<blockquote><font size="1" face="MS Sans Serif, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Taurus:
class A{
bool IsInHeap;
public:
A():IsInHeap(false){}
bool OnHeap(){return IsInHeap;}
void* operator new(size_t size)
{
IsInHeap=true;<hr></blockquote>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
unknown identifier!!!

Hans Andersen
Mar 5, 2002, 02:22
to El:
As Aram said, u must use only C++ <img src="smooch-1.gif" border="0"> )
to Taurus:
Sur, Aramy (inchpes misht <img src="smooch-1.gif" border="0"> ) chisht a asum, qo operator new()-n static a <img src="smooch-1.gif" border="0">
urish ban gti <img src="smooch-1.gif" border="0">

to All:
come onnn, ppl, luzeq tenanq <img src="smooch-1.gif" border="0">

Hans Andersen
Mar 5, 2002, 02:29
<blockquote><font size="1" face="MS Sans Serif, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Taurus:
class A{
public:
bool OnHeap(){return true;}
private:
~A(){}
};
<img src="smooch-1.gif" border="0"> <img src="smooch-1.gif" border="0"> <img src="smooch-1.gif" border="0"> <img src="smooch-1.gif" border="0"> <img src="biggrin2.gif" border="0"> <hr></blockquote>

<img src="biggrin2.gif" border="0"> <img src="biggrin2.gif" border="0"> <img src="biggrin2.gif" border="0">

greka
Mar 5, 2002, 15:50
nu, narod, postol'ku poskol'ku debaty razvivajutsa, porobuem vnesti svoju leptu <img src="wink-5.gif" border="0">

Ne xotite sistemnyx spiskov HEAP-nutoj pamjati, budem ispol'zovat' sobstvennuju:


class famous_A
{
private:
static list<VOID_PTR> lst;

public:
bool IsDataOnHeap()
{ const void *ptr = (void*)this;
list<VOID_PTR>::iterator it = find( lst.begin(), lst.end(), ptr );

return ( it != lst.end() );
}

void * operator new(size_t size)
{ void *ptr = : <img src="embarrassed.gif" border="0"> perator new( size );
lst.push_front( ptr );
return ptr;
}

void operator delete(void *ptr)
{ list<VOID_PTR>::iterator it = find( lst.begin(), lst.end(), ptr );

if ( it != lst.end() )
{
: <img src="embarrassed.gif" border="0"> perator delete(ptr);
lst.erase(it);
}
}
};


list<VOID_PTR> famous_A::lst;

<img src="tounge.gif" border="0">

greka
Mar 5, 2002, 15:54
rojicy v topike smotrjatsa koloritno, ne tak li...?
<img src="smooch-1.gif" border="0">

Aram Hambardzumyan
Mar 5, 2002, 17:11
<blockquote><font size="1" face="MS Sans Serif, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Greco El:
nu, narod, postol'ku poskol'ku debaty razvivajutsa, porobuem vnesti svoju leptu <img src="wink-5.gif" border="0">

Ne xotite sistemnyx spiskov HEAP-nutoj pamjati, budem ispol'zovat' sobstvennuju:

[...skiped...]

<hr></blockquote>

а будет ли это работать, если я унаследуюсь каким-нибудь виртуально-множественным образом от этого класса, создам объект наследника, и от него запрошу IsDataOnHeap()? <img src="smooch-1.gif" border="0"> ведь this уже будет не непосредственно тот, что у нас в списке <img src="wink-5.gif" border="0">

greka
Mar 5, 2002, 21:59
Gol' na vydumki xitra <img src="wink-5.gif" border="0">

na etot sluchaj mojno ispol'zovat' konechno je metod "IsDataOnHeap()", toka ego nado budet podredaktirovat' tak:

bool IsDataOnHeap(const void *ptr)
{
list<VOID_PTR>::iterator it = find( lst.begin(), lst.end(), ptr );

return ( it != lst.end() );
}

Vse-taki peredavat' nado budet.
Esli ne nravitsa nalichie dvux odinakovyx funkcij, to ostavljaem odnu:
bool IsDataOnHeap(const void *ptr=NULL)
libo
bool IsDataOnHeap(const void *ptr)
{
void *ppp;
ppp = (ptr) ? prt : this;
// then use "ppp"...
}

<img src="smooch-1.gif" border="0">

Eshe zamechanija ..? <img src="graemlins/nod.gif" border="0" alt="[Agree]" />

Hans Andersen
Mar 6, 2002, 11:32
Congratulations El,
a good approach <img src="smooch-1.gif" border="0"> osobenno klevo vygledit golobal operator new <img src="smooch-1.gif" border="0"> ))

No tut small-ik 'no' est':
-----
[QUOTE]Originally posted by Greco El:
[QB]Gol' na vydumki xitra <img src="wink-5.gif" border="0">

na etot sluchaj mojno ispol'zovat' konechno je metod "IsDataOnHeap()", toka ego nado budet podredaktirovat' tak:
-----
kto budet insert-nut' derived ukazatel v tvoj spisok? <img src="smooch-1.gif" border="0"> a little improvement is needed.


kto nibud' method pokoroche i poshustree? <img src="smooch-1.gif" border="0">