Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
16 / 16 / 10
Регистрация: 24.01.2014
Сообщений: 187

Об удалении указателя в деструкторе класса

15.07.2015, 22:03. Показов 4769. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Изучаю C++, хочу уточнить вопрос об указателях...

Например, есть такой код:
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
class Obj {
public:
    Obj() {};
    ~Obj() {};
protected:
 
};
 
class Test {
public:
    Test() {
        object = new Obj();
    }
 
    ~Test() {
         delete object;
    }
 
    Obj* getObj() { return object; }
protected:
Obj* object;
};
 
 
void testPtr(Obj* object) {
// Тут действия с объектом
}
 
int main() {
 
Test test;
Obj* obj = test.getObj();
 
testPtr(obj);
 
// Тут действия с объектом
 
return 0;
}
При создании класса Test, в его конструкторе, создаётся указатель на класс Obj, в деструкторе он удаляется.

А если я использую этот указатель вне класса: в функции main(), потом передаю его в другую функцию, там выполняю ещё действия с объектом...

Правильно будет удалить указатель в деструкторе класса Test и всё? В функции main ведь уже не нужно его удалять?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.07.2015, 22:03
Ответы с готовыми решениями:

Возникает ошибка при удалении динамического массива символов в деструкторе класса
Всем привет. Есть приватная переменная, указатель на строку wchar_t *pUAgent; В конструкторе я ее инициализирую: pUAgent =...

С++, delete в деструкторе класса не видит переменные, создаваемые new в конструкторе класса
#include "stdafx.h" #include "iostream" #include "math.h" using namespace std; class fun { double t = 0, x = 0, y = 0, z =...

Создание указателя на экземпляр класса, описанного после объявления указателя
Здравствуйте! Проблема в том, что нужно сделать так: class A{ public: B* b = nullptr; }; class B{ public:

23
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
16.07.2015, 17:15
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Tulosba Посмотреть сообщение
Если вообще ни для каких членов участвующих в объекте на любом уровне не определен пользовательский конструктор копирования, то можно было бы и сказать про побитовую копию. С другой стороны, я не уверен, что это будет справедливо для всех систем. Т.к. могут быть и некоторые поля заполнители для выравнивания м/у членами.
На тему, когда можно использовать memcpy, а когда нельзя.
http://en.cppreference.com/w/c... y_copyable
http://www.open-std.org/JTC1/S... n4148.html
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
16.07.2015, 18:26
Цитата Сообщение от hoggy Посмотреть сообщение
побайтовую.
побайтовую, которая при этом не является побитовой?
Цитата Сообщение от ct0r Посмотреть сообщение
http://en.cppreference.com/w/cpp/typ...ially_copyable
Любопытно, что ideone не знает про std::is_trivially_copyable в режиме C++14 http://ideone.com/gd181y
Но речь немного не о том. Пример:
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
#include <cstring>
#include <iostream>
#include <type_traits>
 
struct D
{
    int a;
    char b;
};
 
int main()
{
    D d1, d2;
    
    memset( &d1, 0, sizeof(d1) );
    memset( &d2, 0xff, sizeof(d2) );
    
    d1.a = d2.a = 42;
    d1.b = d2.b = 'a';
    
    std::cout << std::boolalpha;
    std::cout << std::is_trivially_copyable<D>::value << '\n';
    std::cout << sizeof(D) << '\n';
    
    std::cout << !memcmp( &d1, &d2, sizeof(D) ) << '\n';
}
http://coliru.stacked-crooked.... 545e4229b3
true
8
false
Не смотря на то, что объекты d1 и d2 равны почленно, они не равны побайтно.
1
16 / 16 / 10
Регистрация: 24.01.2014
Сообщений: 187
16.07.2015, 18:30  [ТС]
Ух... ну и тема... Столько сложностей
0
16.07.2015, 19:12

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Тем что если член имеет конструктор копирования будет вызван именно он, а не простое копирование памяти а-ля memcpy.
в примере TC нету конструктора копирования у члена. Произойдёт клонирование побитово (технически даже не побайтово а по машинно wordow'o - аппаратно зависимо это)) . То есть сам экземпляр Test нельзя передать в функцию. А зачем его создавать, если везде надо писать - "МИНА!"?
Да ну его. Чей-то утомился я. Почленно. Пословно, побитово и побайтово. :friends:

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2015, 19:12

Освобождение памяти в деструкторе класса
Перечитал по этому поводу много информации. Главный вопрос. Есть класс в котором происходит динамическое выделение памяти. В...

При удалении указателя срабатывает точка останова
В принципе, в заголовке все есть... Добавлю лишь, что я всего лишь маленький ламер, камнями не кидать в случае чего... Тыкните мне носом,...

Ошибка при удалении явно заданного указателя
Помогите, пожалуйста, с этой проблемой. Уже 2 недели не могу сдать лабу &quot;main.cpp&quot; char* a=new char; char b=0; char* c=new char;...

Удалить динамический массив в деструкторе класса
Здравствуйте, есть следующий код. Хочу удалить динамический массив в деструкторе, но не выходит, не видит массив. Если описываю массив в...

Падает приложение в деструкторе дочернего класса (родители шаблонные)
Если в параметры конструктора класса Owner был передан конкретный объект Container, то: попытка вызова метода Type Container::pop()...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru