Форум программистов, компьютерный форум CyberForum.ru

Перегрузка глобального оператора delete с параметрами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Линейный поиск в массиве и списке http://www.cyberforum.ru/cpp-beginners/thread963045.html
Добрый день, дорогие форумчане! Имеется программа, которая должна выполнять линейный поиск по ключу в массиве и списке, но функция поиска LinearSearch должна быть шаблонной. Функцию саму написал, с массивом работает на ура, но в самом списке я не знаю как перегрузить операторы, что бы она работала со списком. Перегрузить нужно оператор ==, ибо компилятор ругается на него и оператор индексации...
C++ Чтение из файла Как вывести содержимое ранее созданных файлов на на экран? Вот кусок кода. Открыть то я открыл, а построчно вывести не могу, не знаю что написать) do { scanf("%i", &k); switch(k) { case 1: {file = fopen(FileName,"r"); break; } case 2: {file = fopen(FileNameR,"r"); break; } case 3: {system("cls"); main();} } http://www.cyberforum.ru/cpp-beginners/thread963019.html
Нужно отсортировать методом Шелла с++ C++
#include "stdafx.h" #include <iostream> #include<cstdlib> #include<ctime> using namespace std; int main () {const int n=3;const int m=3; int a; srand(time(NULL)); int i,j;
Быстрый поиск супернатуральных чисел C++
Натуральное число будем называть супернатуральным, если в своем десятичном виде оно не содержит единиц, а произведение всех его цифр равно n. Для заданного n выясните, сколько существует супернатуральных чисел. Технические условия Входные данные: Содержит одно целое число n, не превосходящее 2×109. Выходные данные: Вывести количество супернатуральных чисел по модулю 101. Информация о...
C++ Найти координаты четвертой вершины параллелограмма http://www.cyberforum.ru/cpp-beginners/thread962988.html
Привет всем. Вот задали совсем простенькую задачку: Известно, что точки с координатами (x1, y1), (x2, y2), (x3, y3) являются тремя вершинами некоторого параллелограмма. Найти координаты четвертой вершины. Все бы хорошо, но я не знаю как ее решить, не как написать код, а саму геометрическую часть, т.е. алгоритм, помогите пожалуйста :)
C++ Чёрный ящик или белый ящик Всем привет. Задали программу написать a + b и сумму вывести в файл, а птом протестировать либо на чёрный ящик, либо на белый ящик. Я лекции прочитал и инфу. в нете, вроде понял , а как писать не знаю. вот код программы подкиньте идеи и код(тестора) , в первый раз на наглядном примере будет легче понять и разобраться спасибо - НАРОД. #include <stdio.h> long a,b; int main(){ ... подробнее

Показать сообщение отдельно
Виктор_Сен
33 / 26 / 1
Регистрация: 01.08.2011
Сообщений: 176

Перегрузка глобального оператора delete с параметрами - C++

26.09.2013, 18:12. Просмотров 829. Ответов 4
Метки (Все метки)

Столкнулся с проблемой при перегрузке оператора delete с параметрами: почему-то всегда вызывается не мой оператор, а стандартный. Вот например такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <Windows.h>
#include <iostream>
using namespace std;
#include <malloc.h>
 
class World
{
public:
    World(int x);
    ~World();
private:
    int _x;
};
 
World::World(int x)
{
    _x=x;
    cout<<"World constructor, x="<<x<<endl;
}
 
World::~World()
{
    cout<<"World destructor"<<endl;
}
 
void* operator new(size_t size, World* world)
{
    cout<<"My operator new, size="<<size<<", world="<<world<<endl;
    return malloc(size);
}
 
void operator delete(void* pointer, World* world)
{
    cout<<"My operator delete, pointer"<<pointer<<", world="<<world<<endl;
    free(pointer);
}
 
class WorldObject
{
public:
    WorldObject(int y, World* world);
    ~WorldObject();
private:
    int _y;
    World* _world;
};
 
WorldObject::WorldObject(int y, World* world)
{
    _y=y;
    _world=world;
    cout<<"WorldObject constructor, y="<<y<<", world="<<world<<endl;
}
 
WorldObject::~WorldObject()
{
    cout<<"WorldObject destructor"<<endl;
}
 
int main()
{
    World world(10);
    WorldObject* worldObject=new(&world) WorldObject(5,&world);
    delete(&world,worldObject);
    system("pause");
    return 0;
}
не выводит, как следовало ожидать, собщения "My operator delete..." (скрин 1). По идее нужно писать не delete(&world,worldObject); а delete(worldObject,&world);, но тогда при выполнении программы возникает Debug Assertion Failed (скрин 2). У меня складывается впечатление, что происходит просто игнорирование парамеров delete кроме последнего, и для него вызывается стандартный delete. Компилятор Visual Studio 2010.
Миниатюры
Перегрузка глобального оператора delete с параметрами   Перегрузка глобального оператора delete с параметрами  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru