![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Итак, есть класс, принимающий на входе массив. При этом нужно выполнить его глубокое копирование. Вопрос: куда можно скопировать данные?
Требования к задаче: 1. Работа со стеком (никакой кучи) 2. Каждый объект класса должен получить собственную копию массива Пример: Код:
Нужно, что бы умел. И что бы разные объекты класса хранили собственные копии данных (объекты класса не являются синглтонами, и хотят уникальные копии данных). зы: соль затеи в том, что бы научить класс "статических массивов" пересоздаваться с новым размером. Что бы можно было выполнять следующее: int A[10]; int B[20]; TArray<int> test(A); //сделал глубокое копирование, и хранит внутри массив из 10 элементов TArray<int> test = B; //сделал глубокое копирование, и хранит внутри массив из 20 элементов И никакой кучи. |
![]() |
![]() |
![]() |
#2 | |
C++ hater
Старожил
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]() Цитата:
Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
что такое "скоп"?
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
ааа... ну блин, опечатался:
Код:
|
![]() |
![]() |
![]() |
#5 |
C++ hater
Старожил
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
область видимости.
если считать, что класс реализован, я не пойму в твоем примере, где тут "пересоздавание"? если напишем Код:
Код:
обобщу мой вопрос. что такое ПЕРЕСОЗДАВАНИЕ, и чем тебя не устроило например это? Код:
Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
![]() |
![]() |
![]() |
#6 | |
C++ hater
Старожил
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
2_Bers
Цитата:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Гм... в общем, мыслю я, любая работа с кучей тут будет более эффективная, нежели огород из шаблонов.
Даже если и получится нечто - вряд ли оно будет практично. А покамест нерабочий вариант таков: Код:
При этом, такой "массив" можно будет использовать только как временный приемник данных. Он сможет принять данные, и попридержать их, пока они не будут скопированы куда либо вызывающей стороной. После чего, временный объект можно будет спокойно уничтожить. Предполагаю - даже если получится, то решение будет сложным, шаблонным, и не гибким. А посему поделка не взлетит... Можно ещё хранить данные в качестве static локальных массивов. Но такая жесть приведет к усложнению поделки до безобразия: один статик массив на все объекты класса. К тому же, каждый очередной массив уникальной размерности будет приводить к разрастанию кода инстанцированного класса, и замедлять компиляцию. Последний раз редактировалось _Bers; 19.03.2012 в 07:41. |
![]() |
![]() |
![]() |
#8 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]() Цитата:
А вообще, не понятно в чём затея этого дела. Если массивы фиксированной длины, то почему не воспользоваться тем кодом, что привёл pproger, но с дополнительным свойством, определяющим текущий размер массива и перегруженным оператором присваивания. Сам массив выделять с запасом. Код:
|
|
![]() |
![]() |
![]() |
#9 | ||
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
Есть любопытное обсуждение этого явления из области "когда мальчики тупят, им на помощь приходят девочки" http://alenacpp.blogspot.com/2008/01/const.html Цитата:
Это значит, что принимающая сторона принимает объект, который будет инкапсулировать внутри себя эту информацию. При этом важно, что бы пришедшие данные были скопированы, и стали уникальной собственностью принимающей стороны (а не просто указатель на внешние данные). Последний раз редактировалось _Bers; 19.03.2012 в 22:11. |
||
![]() |
![]() |
![]() |
#10 | |||
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]() Цитата:
И кстати, "фиксим константность" не сработает, так как в области видимости всё ещё остаётся константная ссылка и данные будут уничтожены только по выходу из текущей области видимости. Цитата:
Цитата:
Последний раз редактировалось netrino; 21.03.2012 в 19:48. |
|||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Данные-члены шаблоны | _Bers | Общие вопросы C/C++ | 12 | 01.02.2012 15:51 |
Массивы, авторизация через ВК, как вытащить данные? | Delphinchik | PHP | 0 | 23.01.2012 19:12 |
массивы и строковые данные | radiokarazinec | Общие вопросы Delphi | 13 | 23.02.2011 05:47 |
члены последовательности | amikulia | Помощь студентам | 0 | 14.01.2011 12:35 |
Массивы,текстовые данные на языке С++ | Saferon | Помощь студентам | 6 | 13.01.2011 18:00 |