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

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

Восстановить пароль Регистрация
 
 
Divergence
 Аватар для Divergence
7 / 7 / 0
Регистрация: 19.06.2013
Сообщений: 174
09.06.2014, 02:15     Чем может быть чревато создание в классе адреса на другой класс #1
Всем привет!
Я решил не заморачиваться с наследованием, так как у меня каждый класс использует только свои узкоспециализированные функции. А вот некоторые данные из класса все равно таскать приходится.
Таким образом, у меня возникла вот такая, можно сказать, иерархия:

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
class Object //Хранит в себе всю информацию о любом объекте
{
public:
float o1;
float o2;
float o3;
Object() //Конструктор
{
o1 = 1;
o2 = 2;
o3 = 3;
}
~Object(){} //Деструктор
void ObjectFunc1(){} //Функция 1
void ObjectFunc2(){} //Функция 2
};
 
class Paint //Клас Paint не наследует класс Object, тем не менее имеет внутри себя один экземпляр класса Object
{
public:
Object* MyObject; //Адрес экземпляра класса Object
Paint(Object* fObject) //Конструктор
{
MyObject = fObject; //Копирование в переменную класса Paint адреса уже существующего экземпляра Object
}
~Paint(){} //Деструктор
void PaintFunc1(){} //Функции-члены Paint
void PaintFunc2(){} 
};
 
void WinMain()
{
Object *MyObject = new Object;
Paint   *MyPaint   = new Paint(MyObject);
 
//Используем Paint как хотим
 
delete Object;
delete Paint1;
}
Вот так у меня это реализовано.
Вопрос в том, есть ли в такой реализации подводные камни, если есть, то какие??
Буду благодарен за любые предупреждения и мысли по этому поводу.
Лично мне кажется, что никакой опасности нет, тем не менее чутье ноет о том, что здесь не совсем все так просто как кажется...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2014, 02:15     Чем может быть чревато создание в классе адреса на другой класс
Посмотрите здесь:

Создать класс который может быть использован для хранения информации и студентах C++
C++ В чем может быть ошибка, и как её вылечить?
C++ В чем может быть ошибка?
Реализовать класс Account, представляющий собой банковский счет. В классе должны быть четыре поля C++
В чем может быть ошибка? (пример с побитовым сдвигом) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2014, 02:01     Чем может быть чревато создание в классе адреса на другой класс
Еще ссылки по теме:

В чем может быть ошибка? (передача аргументов функции) C++
C++ В чем может быть ошибка. Расстояние между вершинами дерева
Вылетает "strcpy_s", в чем может быть ошибка? C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,715
Записей в блоге: 3
10.06.2014, 02:01     Чем может быть чревато создание в классе адреса на другой класс #21
Вполне нормально говорит Jupiter, мне кажется.
Цитата Сообщение от Nekto Посмотреть сообщение
Для этого придумали умные указатели. std::shared_ptr, думаю, подойдет для данного случая.
С обычными тоже стоит разобраться. Без практики трудно понять.
Divergence, критическое отношение к прочитанному, это хорошая вещь. Однако если материала много, то конформизм не помешает. С чем-то стоит согласиться в надежде потом понять. Иначе потеря времени и сил не соизмеримы с результатом. Это моё личное мнение. Действуйте так как вам удобно. Что касается стандартных конструкций, то они нужны для упрощения того, что можно выразить и без них и тут выбор за вами.
На закуску пример. Я понимаю, что вы не собираетесь так сделать и не для спора пишу:
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
//программа которая не читается другими без боли, хорошо защищена :)
#include <iostream>
using namespace std;
 
struct B{
int i;  
B() {i=1;}
};
 
struct A{
B *b;
A( B *obj){//это конструктор преобразовани и он легко позволяет написать (см. main)...
b = obj;
}
};
 
int main()
{
B *obB;
A obA = obB;//...вот так. Часто ctor преобразования используется именно так))
cout << obA.b->i << endl;//Run-Time Check Failure #3 - The variable 'obB' is being used without being initialized. :)
cout<<endl;
system("pause");
return 0;
}
Удачи!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yandex
Объявления
10.06.2014, 02:01     Чем может быть чревато создание в классе адреса на другой класс
Ответ Создать тему
Опции темы

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