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

Чем может быть чревато создание в классе адреса на другой класс - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не получается сделать переполнение буфера http://www.cyberforum.ru/cpp-beginners/thread1203206.html
Всем привет! Нужно сделать переполнение буфера и подменить адрес функции на другой. Если делаю так: void overflow(char *ptr) { char buffer; strcpy(buffer, ptr); }
C++ Помогите исправить программу решения системы уравнений Выводит неопределенность # include <stdio.h> #include <iostream> # include <math.h> #include <conio.h> #include <locale.h> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread1203179.html
Объясните код C++
Задача Улитка. Улитка ползёт по вертикальному шесту высотой h метров, поднимаясь за день на a метров, а за ночь спускаясь на b метров. На какой день улитка доползёт до вершины шеста? Программа...
C++ Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия
Добрый вечер! Я изучать С++ начал, дошел до массивов и попалась задача вот такого содержания: "Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия. Программа...
C++ Сортировка слиянием: подсчитать количество перестановок http://www.cyberforum.ru/cpp-beginners/thread1203144.html
Привет всем. Дана задача: подсчитать количество перестановок при сортировке массива. Нужен быстрый алгоритм, желательно алгоритм сортировки слиянием. Вот код: #include <stdio.h> #include <conio.h>...
C++ Вставка элемента в массив после последнего положительного Нужно сделать программу, которая бы вставляла после последнего положительного элемента массива заданное значение, в противном случае вывести "ошибку". Что-то не получается. Посмотрите и подскажите,... подробнее

Показать сообщение отдельно
Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
09.06.2014, 03:16  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Divergence, использование объектов классов или указателей на объекты классов в качестве полей классов это нормально. Если говорить об указателях, то это чуть более трудоёмко чем просто использовать сам объект. Разница почти та же, что и при использовании переменной указателя на стеке, но тяжелее то, что конструкторов не один и везде нужно побеспокоиться о инициализации указателя. То есть нужно выделить память, чем-то заполнить, а в деструкторе удалить.
В Вашем конструкторе копируется указатель и Вы не можете знать указывает он на что-то разумное или нет. Обычно в таких случаях делают иначе. Но сначала нужно написать конструктор без параметров и или закрыть его (тогда он может быть пустой) или выделить в нём память под объект и заселить её объектом по умолчанию. Закрывать - прём узкий. Это значит, что контейнеры STL использовать не выйдет, например.
Написав открытые конструкторы Вы будете уверены, что как бы не создавался экземпляр, он будет инициализирован. А в конструкторе копирования тоже нужно бы выделить память и скопировать в неё объект из оригинала почленно. В деструкторе удалить. Тут лучше ничего не делать руками.
IGPIGP, спасибо за ответ!
Если честно, я не очень понимаю эти опасения по поводу того, что указатель может не указывать на существующую область памяти... у меня в коде сначала выделяется память, только затем в новый класс передается указатель. В случае такого грамотного подхода (когда ничего не забыто) опасности никакой нет?
Или все же могут быть косяки?
Например, я смутно предполагаю ситуацию, что в какой-то момент вызовется деструктор, который освободит память, на которую у меня несколько указателей по определению... Соответственно, несколько указателей будут указывать на пустоту. Однако, логика программы такова, что жизнь одного класса без другого просто не имеет смысла, поэтому уничтожаться они будут строго один за другим до самого конца. Остаются ли какие-то опасности при такой ситуации?
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru