Click here to Skip to main content
16,014,588 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: What does an object REALLY look like? Pin
Joaquín M López Muñoz4-Feb-02 9:22
Joaquín M López Muñoz4-Feb-02 9:22 
GeneralRe: What does an object REALLY look like? Pin
Jamie Hale4-Feb-02 9:32
Jamie Hale4-Feb-02 9:32 
GeneralRe: What does an object REALLY look like? Pin
Jamie Hale4-Feb-02 9:39
Jamie Hale4-Feb-02 9:39 
GeneralRe: What does an object REALLY look like? Pin
Joaquín M López Muñoz4-Feb-02 11:21
Joaquín M López Muñoz4-Feb-02 11:21 
GeneralRe: What does an object REALLY look like? Pin
Jamie Hale4-Feb-02 18:25
Jamie Hale4-Feb-02 18:25 
GeneralRe: What does an object REALLY look like? Pin
4-Feb-02 9:48
suss4-Feb-02 9:48 
GeneralRe: What does an object REALLY look like? Pin
Jamie Hale4-Feb-02 9:50
Jamie Hale4-Feb-02 9:50 
GeneralRe: What does an object REALLY look like? Pin
4-Feb-02 11:19
suss4-Feb-02 11:19 
Almost there... I haven't quite got it conceptually (which makes it worth hacking on, I guess) but this _seems_ to work.

Just some details of the delete declaration to argue with the compiler about... there are some special rules for delete at the class level. BTW the new could be global as well...

Not sure if the vtable pointer is included in the size - tracking p in the new op shows 16?

Facinating stuff...

#include "windows.h"
#include <iostream.h>
#include <stdio.h>
  
  
class foo {
public:
    foo(){}
    ~foo(){
        cout << "destroying " << i << endl;
    }
  
    foo(int n) : i(n){
        cout << "constructing " << i << endl;
    };
  
    void* operator new (size_t sz, void* p) {
       return p;
    }
     
<code>//  static void  operator delete(void *p, size_t sz) {}; // only problem left... </code>
     
private:
    int i, j, k, l;     // 4 X 4 ?
};
   
   
int main(int argc, char* argv[])
{
   
    HANDLE hHeap = GetProcessHeap();
  
    if(hHeap) {
 
        // alloc space from heap 
        void * vp = HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 20 * sizeof(foo));   // space for 20 foos
        foo * fooPs[20];
 
        // create 20 foos
        for (int i = 0; i < 20; ++i) {
            fooPs[i] = new ((foo*)vp+i)foo(i); // foo* cast is important - a void object has no size
        }
 
        // destroy 20 foos
        for ( i = 0; i < 20; ++i ) {
            fooPs[i]->foo::~foo();
        }
 
        // free mem
        HeapFree(hHeap, 0, vp);
    }
  
    int x;
    cin >> x;
  
    return 0;
}

GeneralRe: What does an object REALLY look like? Pin
Jamie Hale4-Feb-02 18:17
Jamie Hale4-Feb-02 18:17 
GeneralRe: What does an object REALLY look like? Pin
5-Feb-02 6:10
suss5-Feb-02 6:10 
Generalremove deleted records Pin
jafrazee4-Feb-02 5:27
jafrazee4-Feb-02 5:27 
GeneralRe: remove deleted records Pin
Mazdak4-Feb-02 6:12
Mazdak4-Feb-02 6:12 
GeneralRe: remove deleted records Pin
jafrazee4-Feb-02 6:19
jafrazee4-Feb-02 6:19 
GeneralRe: remove deleted records Pin
Mazdak4-Feb-02 6:49
Mazdak4-Feb-02 6:49 
GeneralRe: remove deleted records Pin
jafrazee4-Feb-02 7:58
jafrazee4-Feb-02 7:58 
GeneralRe: remove deleted records Pin
Mazdak4-Feb-02 9:10
Mazdak4-Feb-02 9:10 
GeneralSTL containers Pin
User 98854-Feb-02 5:02
User 98854-Feb-02 5:02 
QuestionImplicit Copy constructor generation bug? Pin
Chen Venkataraman4-Feb-02 4:35
Chen Venkataraman4-Feb-02 4:35 
AnswerRe: Implicit Copy constructor generation bug? Pin
Joaquín M López Muñoz4-Feb-02 6:00
Joaquín M López Muñoz4-Feb-02 6:00 
General.ini path Pin
XAlien4-Feb-02 3:55
XAlien4-Feb-02 3:55 
GeneralRe: .ini path Pin
Fredrik Skog4-Feb-02 4:42
Fredrik Skog4-Feb-02 4:42 
GeneralRe: .ini path Pin
Carlos Antollini4-Feb-02 5:03
Carlos Antollini4-Feb-02 5:03 
GeneralOwner draw controls Pin
Juvenal4-Feb-02 2:51
Juvenal4-Feb-02 2:51 
GeneralRe: Owner draw controls Pin
Mazdak4-Feb-02 3:39
Mazdak4-Feb-02 3:39 
GeneralRe: Owner draw controls Pin
User 66584-Feb-02 3:47
User 66584-Feb-02 3:47 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.