Сразу прошу не пинать.
Идея такова — для удобной работы с динамической памятью в C++, набросаль небольшой модуль, ниже приведены кусочки из него, который черпает идеи из Java, разве что сам память не чистит (мне это не нужно), зато например позволяет сразу найти утечки памяти...
/*Основные положения моего указателя*/
struct gPointer {
void *address;
wchar_t *comment;
gPointer *prev, *next;
void set(g4 size, wchar_t* comment) {
address = new g1[size];
g4 len; for (len = 0; comment[len] != L'\0'; len++);
this->comment = new wchar_t[len + 1];
memcpy(this->comment, comment, sizeof(wchar_t) * (len + 1));
}
gPointer(g4 size, wchar_t* comment) { set(size, comment); }
gPointer(g4 size, wchar_t* comment, gPointer *prev) {
set(size, comment);
this->prev = prev;
this->next = prev->next;
next->prev = prev->next = this;
}
~gPointer() {
delete[] address;
delete[] comment;
prev->next = next;
next->prev = prev;
}
};
/*основные функции*/
gPointer *first = NULL, *last = NULL;
void gInitPointers() {
first = new gPointer(1, L"HEAD_POINTER");
first->next = last = new gPointer(1, L"TAIL_POINTER");
last->prev = first;
}
void *gAlloc(g4 size, wchar_t *comment) {
last->prev = new gPointer(size, comment, last->prev);
return last->prev->address;
}
void gFree(void *pointer) {
for (gPointer *curr = first->next; curr != last; curr = curr->next)
if (curr->address == pointer) {
delete curr;
return;
}
MessageBox(0, L"Убиваемый указатель не выделялся или уже убит", L"", 0);
}
void gListPointers() {
if (first->next == last) {
MessageBox(NULL, L"MEMORY CLEAR", L"Information", MB_ICONINFORMATION);
return;
}
for (gPointer *curr = first->next; curr != last; curr = curr->next) {
MessageBox(NULL, curr->comment, L"gPointer", MB_ICONINFORMATION);
}
}
Вопросы.
Первый, самый важный, наверное простой, но мне непонятный. конструкция type *var = new type(parameters...); выделяет память и сразу вызывает конструктор. Как на с++ вызвать конструктор на участок памяти? ну то есть type *var = (type*)gAlloc(sizeof(type), L"MY_FIRST_VAR"); выделит память, а конструктор-то как вызвать к этой переменной?
Второй, менее важный — можно как-нибудь #define'ом переделать оператор new во всем исходнике в вызов моего gAlloc? В данный момент я просто язаю ctrl+f

Третий: интересны ваши комментарии к реализации и вообще идее