crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

6 страниц V  « < 4 5 6  
Ответить в данную темуНачать новую тему
> Создание неограниченного количества элементов
DEADHUNT
  опции профиля:
сообщение 13.8.2010, 19:27
Сообщение #51


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(DEADHUNT @ 13.8.2010, 17:47) *
Синтаксис я тоже не понял :) что означает "= delete" и "= default" после прототипа функции?

= delete/default применяется только к специальным членам класса(конструктор, конструктор копирования, ...), delete обозначает то что компилятор не должен генерировать default версию этого специального члена класса, а при попытке вызова выдавать ошибку компиляции(это равносильно объявиления данного члена закрытым и не реализовывать). default показывает компилятору что он должен создать default версию данного члена, например:
class some_class {
public:
   some_class() = default;
   some_class(int a) : m_a(a) { }
private:
   int m_a;
};

some_class a;
some_class a(10);

иначе бы компилятор не стал создавать конструктор по умолчанию.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 13.8.2010, 20:26
Сообщение #52


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


понятно

то есть мне нужно добавить
        s_VectorPtr(const s_VectorPtr& o2)
        {
            m_p=0;
            (*this)=o2;
        }


Сообщение отредактировал Алексей1153 - 13.8.2010, 20:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 13.8.2010, 20:38
Сообщение #53


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(Алексей1153 @ 13.8.2010, 21:26) *
то есть мне нужно добавить

это же разрушающее копирование получается(если ещё посмотреть код operator=), т.е. что-то типа std::auto_ptr, а их нельзя в контейнерах использовать, надо что-то типа shared_ptr делать, то есть хранить количество ссылок на указатель, ...

Сообщение отредактировал DEADHUNT - 13.8.2010, 20:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 13.8.2010, 20:49
Сообщение #54


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


DEADHUNT, так так, тут вот поподробнее. Почему разрушающее? Я копирую указатель в новую оболочку, а сам "указуемый" объект жив.

Это вот в операторе = у меня заменяемый объект отправляется в кучу, а принимаемый его заменяет

Почему нельзя в контейнере использовать, ведь контейнер ничего неиспортит, вызывая конструкторы и операторы

Я главную цель всей этой эпопеи не сказал (думал, и так понятно) - безопасное использование resize() контейнера + автоудаление "указуемых" объектов в кучу

Сообщение отредактировал Алексей1153 - 13.8.2010, 20:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 13.8.2010, 20:57
Сообщение #55


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


получается так:
X<T> b = ...;
X<T> a(b); // b - передаёт указатель a

std::vector<X<T>> v;
v.push_back(a); // a - разрушается
v.front(); // разрушается объект в векторе


и ещё непонятно зачем operator= принимает константную ссылку, а внутре изменяет содержимое константного объекта, лучше было бы в параметре использовать не константную ссылку.

Сообщение отредактировал DEADHUNT - 13.8.2010, 20:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 13.8.2010, 21:07
Сообщение #56


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Я не собирался отдельно объявлять переменные класса s_VectorPtr<T> , всем этим заведует сам вектор (структура s_VectorPtr, кстати, в проекте, откуда выдрано, описана как приватная внутри класса с вектором)

Теперь я понимаю твоё возмущение, а также , почему у меня всё работает, хотя, по стандарту, не должно :) Я реализовал и использовал частный случай
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

6 страниц V  « < 4 5 6
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


11 чел. читают эту тему (гостей: 11, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 14:51