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

Есть ли утечка памяти в этом случае? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить число нулей и единиц в массиве http://www.cyberforum.ru/cpp-beginners/thread887546.html
диапазон изменения значений элементов массива 0 или 1 Сделать два варианта программы: -элементы массива задаются пользователем -заполняются с помощью генератора случайных чисел
C++ Определить число нулей и единиц в массиве диапазон изменения значений элементов массива 0 или 1 Сделать два варианта программы: -элементы массива задаются пользователем -заполняются с помощью генератора случайных чисел http://www.cyberforum.ru/cpp-beginners/thread887541.html
C++ Какую роль выполняют идентификаторы в приведенном коде?
Подскажите пожалуйста,какие в данной задаче идентификаторы и их назначение в ней. #include <iostream> #include <algorithm> #include <vector> #include <iterator> #include <cassert> using namespace std; int main()
Ошибка в функции (function: должна возвращать значение) C++
ребят, компилятор выдает error C4716: function: должна возвращать значение что это значит? как с этим бороться? #include "stdafx.h" #include <math.h> #include <string.h> #include <conio.h> #include <iostream> #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <time.h>
C++ Найти количество квадратов нечётных чисел среди компонентов файла http://www.cyberforum.ru/cpp-beginners/thread887521.html
Заполнить файл 7 натуральными числами, полученными с помощью генератора случайных чисел. Найти количество квадратов нечётных чисел среди компонентов файла.
C++ Упорядочить список студентов по оценке, полученной на экзамене и распечатать его На диске имеется файл данных STUDENT.DAT. Упорядочить список студентов по оценке, полученной на экзамене по мат. анализу и распечатать его. подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6230 / 2959 / 287
Регистрация: 04.12.2011
Сообщений: 7,896
Записей в блоге: 3
07.06.2013, 17:53     Есть ли утечка памяти в этом случае?
delete - не всмотрелся в Ваш пример, - теперь понял, но:
В примере речь именно о ссылке на безымянную динамическую переменную. Создаётся она локально как и указатель, но живёт долго. По моим наблюдениям столько же, сколько и динамический объект(?). Тут нет уверенности.

Добавлено через 1 час 6 минут
silent_1991, Ваш пример не похож на вопрос темы. В нём возвращаемый безымянный указатель разыменовывается и значение коприруется в новую созданную переменную (при присваивании или при инициализации не важно). Когда результат принимает ссылка то и в Bашем примере, разыменование указателя во внешней области видимости предоставляет ссылку на динамический объект:
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
#include <iostream>
using namespace std;
class Detail{
int len;
int wid;
public:
    Detail(int _len=0, int _wid=0):len(_len), wid(_wid){}
    Detail(Detail& a):len(a.len), wid(a.wid){cout<<"copyConstr !!!"<<endl;}
void SetLength(int a){len=a;}
void SetWidth(int a){wid=a;}
int GetLength(){return len;}
int GetWidth(){return wid;}
};
Detail *MakeDetail ()
{
    cout << " Calling MakeDetail...\n";
    Detail * NewDetail = new Detail (0, 0);
cout << " Pointer in MakeDetail... "<<NewDetail<<endl;
    NewDetail->SetLength(704);
    NewDetail->SetWidth(510);
    // Теперь без разыменования
    return NewDetail;
}
int main()
{setlocale(0,"rus");
    cout << "\n\n";
    Detail Det1(600, 510);
    cout << " Det.1 Length: " << Det1.GetLength() << " mm.\n";
    cout << " Det.1 Width: " << Det1.GetWidth() << " mm.\n";
    cout << "\n";
    // Теперь разыменовываем указатель на динамическую память
    Detail Det2 = *MakeDetail();
    cout << " Adress out of MakeDetail by copy... "<<&Det2<<" that is a fleak"<<endl;
    // А теперь потеряли указатель... память утекла
    cout << " Det.2 Length: " << Det2.GetLength() << " mm.\n";
    cout << " Det.2 Width: " << Det2.GetWidth() << " mm.\n";
    cout << "\n\n";
    //это прмнмсающая ссылка, она не копирует всебя так как не создаётся в ввиде 
    //самостоятельной переменной как в Вашем примере и коструктор копий не будет вызван
    Detail& Det3 = *MakeDetail();
    cout << " Adress out of MakeDetail by ref... "<<&Det3<<" that is not a fleak"<<endl;
    // А теперь потеряли указатель?... память утекла?
    cout << " Det.3 Length: " << Det3.GetLength() << " mm.\n";
    cout << " Det.3 Width: " << Det3.GetWidth() << " mm.\n";
    cout << "\n\n";
    //а теперь Горбатый:
    delete &Det3;
    cout << " And finnaly uncoment following two lines to have a bit of garbage... "<<endl;
    //cout << " Det.3 Length: " << Det3.GetLength() << " mm.\n";
    //cout << " Det.3 Width: " << Det3.GetWidth() << " mm.\n";
    cout << "\n\n";
    system ("pause");
    return 0;
}
Напоследок в качестве шутки, фрагмент (утрированный мной) увиденный в вопросе одного гостя:
C++
1
2
3
4
5
6
void foo(){
//-------------------------------
int *P = ( new int[10]!=0 )? new int[10] : 0;
//-------------------------------
}
:D
 
Текущее время: 12:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru