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

функции new, delete - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.90
jhendrix
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 184
19.09.2010, 08:54     функции new, delete #1
здравствуйте.
можете показать полную реализацию функции new , delete?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
19.09.2010, 08:58     функции new, delete #2
http://msdn.microsoft.com/en-us/libr...ba(VS.71).aspx

Не по теме:

Вы пробовали в поисковике набрать?

TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
19.09.2010, 10:44     функции new, delete #3
Надеюсь понятно:

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
#include <iostream>
#include <conio.h>
#include <windows.h> // это для генерации случайных чисел(GetTickCount())
using namespace std;
 
class My_Class
{
private:
    int index;
    int * Array; // динамический массив.Мы не знаем его размер и содержание.
public:
    My_Class() : index(0) {}
    My_Class(int size) : index(0)
    {
        Array = new int [size]; // динамически выделяем память под массив
    }
    ~My_Class()
    {
        delete [] Array; // освобождаем память после использования,стираем массив.
    }
    void Fill_Array(int x)
    {
Array[index] = x;
index++;
    }
    int Show(int y)
    {
        return Array[y];
    }
};
 
int main()
{
    srand(GetTickCount());
My_Class obj(20); // создаем массив из 20 элементов.
 
int num;
for(int i = 0;i < 20;i++)
{
num = rand() % 100;
obj.Fill_Array(num); // заполняем массив случайными числами
}
for(int i = 0;i < 20;i++)
cout <<obj.Show(i) << "  ";
 
 
_getch();
}
Добавлено через 6 минут
не по теме:
И не послать бы этого ugosdaryn подальше?
Навыкладывал ерунды не пытаясь сам решить и даже не попросив нормально.
А кто-то бросился за него все делать
Red Planet
 Аватар для Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
19.09.2010, 11:48     функции new, delete #4
Здравствуйте, один из моих вопросов также о new и delete.
  1. Встретил при изучении ООП перегрузку операторов new и 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
    
    class A {
    /*Функции, конструкторы*/
    }
     
    ostream& operator << (ostream &s, const A &top) {
     s <<top.w<<" ("<<top.c<<")."<<endl;
     return s;
    }
     
     
    istream& operator >> (istream &is, A &top) {
     is >>top.w>>top.c;
     return is;
    }
     
    int _tmain (int argc, _TCHAR* argv[]) {
     A *pointer;
     int n;
     cout <<"Quantity of things: ";
     cin >>n;
     for (int i=0; i<n; i++) cin >>pointer[i];
     for (int i=0; i<n; i++) cout <<pointer[i];
     delete []pointer;
    }
    Выходит, что операторы new и delete нужно перегружать только тогда, когда я хочу как-то по-своему задать правила выделения памяти под динамически создаваемые экземпляры (массивы) и не стоит изобретать велосипед, если и так все создается, вводится и выводится без ошибок? Правильно понимаю?
  2. Есть две вещи, измеряющие, сколько выполняется любой участок кода (можно оценить быстродействие решения задачи несколькими методами, чтобы выбрать наискорейший).
    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
    
    /*Первая*/
    class CTimer
    {
      LARGE_INTEGER mlFrequency;
      LARGE_INTEGER mlStart;
    public:
      double duration;
      CTimer() {
        QueryPerformanceFrequency(&mlFrequency);
      }
      void start() {
        QueryPerformanceCounter(&mlStart);
      }
      void  stop() {
        LARGE_INTEGER lEnd;
        QueryPerformanceCounter(&lEnd);
        duration  = (double(lEnd.QuadPart - mlStart.QuadPart) / mlFrequency.QuadPart)*1000;
      }
    };
     
     
    /*Вторая*/
    DWORD startTime, endTime;
    startTime=GetTickCount();
    /*Участок кода (решение какой-либо задачи), который нужно измерить.*/
    endTime=GetTickCount();
    printf ("Performance time: %g ms.\n", endTime-startTime); //Вывод результата.
    Уверен, что существуют и другие. Могут ли подобные счетчики быть хорошими или плохими? Какие лучше и какие хуже?
Nick Alte
Эксперт С++
1561 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
19.09.2010, 13:05     функции new, delete #5
1. Понял правильно.
2. Они не бывают "хорошими" и "плохими", они бывают подходящими и неподходящими. PerformanceCounter способен измерять время с точностью до тактов (в масштабе наносекунд). TickCount ограничен миллисекундами, да и тут бывают погрешности. Выбирать тот или иной счётчик надо, исходя из своих потребностей.
Yandex
Объявления
19.09.2010, 13:05     функции new, delete
Ответ Создать тему
Опции темы

Текущее время: 14:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru