Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2014, 23:05   #1
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию перегрузка new и delete

p1 = new loc(10,20);
вызывается
void* loc:perator new(size_t size){
я смотрю в отладчике, почему size = 8 тут, откуда ето берется???
Почему в new 2 параметра, а в
void* loc:perator new(size_t size){
один!

Код:
#include <iostream>
using namespace std;

class loc{
    int longitude,latitude;
public:
    loc(){};
    loc(int lg,int lt){
        longitude = lg;
        latitude = lt;
    }

    void show(){
        cout << longitude << " ";
        cout << latitude << "\n";
    }
    
    void* operator new(size_t size);
    void operator delete(void* p);
};

void* loc::operator new(size_t size){
    void* p;
    cout << "Operanor new peregrugen" << endl;
    p = malloc(size);
    if(!p){
        bad_alloc ba;
        throw ba;
    }
    return p;
}

void loc::operator delete(void* p){
    cout << "operator delete peregrugon" << endl << endl;
    free(p);
}

int main(){
    loc* p1;
    loc* p2;

    try{
        p1 = new loc(10,20);
    }catch(bad_alloc xa){
        cout << "Error videleni9 pam9ty p1" << endl;
        return 1;
    }

    try{
        p2 = new loc(-10,-20);
    }catch(bad_alloc xa){
        cout << "Error videleni9 pam9ty p2" << endl;
        return 1;
    }

    p1->show();
    delete p1;

    p2->show();
    delete p2;

    char ch = getchar();
    return 0;
}
zla9_kolu4ka вне форума Ответить с цитированием
Старый 10.03.2014, 23:11   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

оператор new и конструктор класса - это две разные вещи.
Конструктор не занимается выделением памяти.

p1 = new loc(10,20); можно рассматривать как две операции - выделение памяти (через new) размером с sizeof(loc) а потом вызывается конструктор loc(10,20)
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
error C2541: 'delete' : cannot delete objects that are not pointers novokhatsky Общие вопросы C/C++ 2 14.12.2009 10:25
Перегрузка операций new, new[], delete, delete[] IgorKr Общие вопросы C/C++ 1 22.10.2008 12:14
new,delete alex87 Общие вопросы C/C++ 1 28.02.2008 17:50