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

Перегрузка operator new - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисление значения функции на отрезке http://www.cyberforum.ru/cpp-beginners/thread991492.html
Составить программу для вычисления значений функции F(x) на отрезке с шагом h.Результат представить в виде таблицы, первый столбец который - значения аргумента,второй - соответствующие значения функции. F(x)=2tg x/2+1 - (c++).Заранее благодарен! :)
C++ Перероботать прогу Нужно перероботать прогу под функцию 0,5 х в кубе #include "stdafx.h" #include "iostream" #include <cmath> using namespace std; //_____________________________________________________ float Trapezodial(int min, int max, int kilkist) http://www.cyberforum.ru/cpp-beginners/thread991478.html
Рекурсивная программа C++
Напишите рекурсивную программу для сортировки массива методом "пузырька". Как сделать из простого кода пузырька рекурсивную программу? Как понимаю нужно запихать ее в какую-то функцию, но явно не просто так... #include <iostream> #include<time.h> int rekurs () { for (i=0;i<n-1;i++) for (j=n-2;j>=i;j--) if (A>A) {
C++ Определение цифры
Для натурального числа N, вводимого с клавиатуры, определите третью справа его цифру, и замените её на 8 Может мне кто-нибудь объяснить, что нужно сделать?
C++ Совет по проекту http://www.cyberforum.ru/cpp-beginners/thread991466.html
Здравствуйте. Столкнулся с такой ситуацией. Скачал готовый проект С++(небольшая задачка с матрицей), но при открытии проекта через visual studio 2008 express edition нет кода программы. Сам код можно посмотреть только через блокнот. Как сделать так, чтобы можно было редактировать проект?
C++ Посчитать количество денег, которые нужно заплатить за цветы, продающиеся группами с разной стоимостью Когда Мальвине исполнилось К лет,она пригласила друзей на свой день рождения.Буратино не долго думая попер в магаз где продают цветы чтобы купить Мальвине столько роз, сколько ей лет.В магазине можно купить 50 роз за 50 гривен, 10 роз за 15 грн, 1 розу за 2 грн. Вопрос: какую минимальную сумму денег должен иметь Буратино, чтобы сделать подарок Мальвине, если она может жить до 100000. До чего... подробнее

Показать сообщение отдельно
milvus
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 35

Перегрузка operator new - C++

29.10.2013, 14:12. Просмотров 330. Ответов 8
Метки (Все метки)

Столькнулся с такой проблемой:
Есть класс Array, в его конструкторе создается массив int
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Array::Array(const size_t size):_size(size)
    {
        printf("Array::Array(const size_t size)\n");
        if (_size>0 && _size<UINT_MAX){
            if ( (_data = new int[_size]) == 0)
                printf("error no memory");
        }
    }
    Array::Array( Array const * const src):_size(src->_size)
    {
        printf("Array::Array( Array const * const src)\n");
 
        if ( (_data = new int[_size]) == 0)
            printf("error no memory");
        for (int i=0; i<_size;i++)
            _data[i] = src->_data[i];
    }
 
    Array::~Array(){
        printf("Array::~Array()\n");
        delete[] _data;
    }
Создал класс который автоматом удаляет объекты класса Array созданные как new Arrray
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Scoped_ptr_arr{
 
private:
    Array * _ptr;
 
    // zapret for BUG fix!!!! call to copy of object or operator=
    Scoped_ptr_arr(const Scoped_ptr_arr & pArray){printf("Scoped constr from class!\n");};
    Scoped_ptr_arr & operator= (const Scoped_ptr_arr&) {};
 
public:
    Scoped_ptr_arr(Array * pArray): _ptr(pArray){printf("Scoped constr from &Array!\n");};
 
    ~Scoped_ptr_arr(){if (_ptr) delete _ptr; printf("Scoped destruct Array!\n");}
 
    Array * ptr(){return  _ptr;}    // return addres then can obj.ptr()->doSomthing();
    bool isNull(){ return _ptr == 0;}
 
    Array * operator-> () {return _ptr;}
    Array & operator*  () {return *_ptr;}
};
в main хочу чтобы все констркуторы вызывалиьс автоматом, но оказывается этого не происходит,
потому что ::new != operator new
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Array arr(10); // i^2
 
    for (int i = 0; i<10;i++)
        arr.set(i,i*i);
 
    {
        Scoped_ptr_arr pArray = new Array(arr);
 
    }   // automat destruct on end of scope not need delete after new
 
    int t;
    scanf("%d",&t);
 
return 0;
}
а он говорит что вот здесь Scoped_ptr_arr pArray = new Array(arr); не вызывается конструктор по объекту arr, а просто копируется содержимое адресов arr в новый объект, соответственно по выходе из программы возникает ошибка и arr удаляется два раза, пробовал перегрузить operator new но не знаю как из него вызвать конструктор по объекту?? Подскажите!

Добавлено через 9 минут
Консольный вывод:
Array::Array(const size_t size)
Array::operator new(8)
Scoped constr from &Array!
Array::~Array()
Scoped destruct Array!
Array::~Array()
На последнем деструкторе все валится так как массив уже был удален!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru