Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> конструктор копирования 
:(
    Опции темы
Vadimka1234
Дата 16.7.2014, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 5.9.2012

Репутация: нет
Всего: нет



Всем привет, понимаю что тема не нова, но помогите плиз разобраться с таким примером.

Вот код класса
Код

public class MyClass
{
private:

    int* m_ID;

public:

    MyClass():m_ID(new int(10)){}
    MyClass(int id):m_ID(new int(id)){}
    MyClass(const MyClass& otherRef)
    {
        (*m_ID)=0;
        m_ID=otherRef.m_ID;
    }
    ~MyClass()
    {
        (*m_ID)=0;
        delete m_ID;
    }
};


Пример немного надуманный, но все же. 

Есть также функция

Код

void SomeFunc2(MyClass myCl)
{

}


Собственно вот сам вызов

Код

int main(array<System::String ^> ^args)
{
    MyClass m=MyClass(4);
    SomeFunc2(m);
    Console::ReadLine();
    return 0;
}


Я понимаю что при вызове этой функции вызывается конструктор копирования. Который создает копию для локальной переменной внутри функции. Перед началом копирования под эту переменную по идеи выделятся память в стеке. Проблема возникает с указателем m_ID. При попытке присвоить ему значение вылетает ошибка. Как я понимаю это связанно с тем, что он указывает не понятно куда и я пытаюсь в "непонятно куда", что-то записать.

Вопрос в том как мне здесь понять, что указатель еще не инициализирован? Надеюсь понятно объяснил что мне надо))
PM MAIL   Вверх
volatile
Дата 16.7.2014, 23:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Vadimka1234 @  16.7.2014,  14:20 Найти цитируемый пост)
    MyClass(const MyClass& otherRef)
    {
        (*m_ID)=0;
        m_ID=otherRef.m_ID;
        m_ID = new int (*otherRef.m_ID);

    }


PM MAIL   Вверх
Vadimka1234
Дата 17.7.2014, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 5.9.2012

Репутация: нет
Всего: нет



Это конечно будет работать, но я не зря привел такой пример в котором обращаюсь к указателю. В общем я нашел приемлемое для себя решение.
PM MAIL   Вверх
Нэраварин
Дата 17.7.2014, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 9.3.2009

Репутация: нет
Всего: нет



Цитата (Vadimka1234)

   понимаю что тема не нова
  

Но вы даже не удосужились прочитать о ней самые азы которые даже в википедии разжёванны!

volatile Всё верно написал!

Цитата (Vadimka1234)

  но я не зря привел такой пример в котором обращаюсь к указателю
  

Нет! Вы зря это написали, более того Вы НЕ поняли, что именно вы написали и что оно делает!
Вот вам прям прямая ссылка на ваш случай конструктор копирования при выделении динамической памяти   Удачи в освоении материала

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.