Сообщение Re: Безопасно ли присваивать один указатель другому?.. от 22.03.2018 18:48
Изменено 22.03.2018 21:16 AlexGin
Re: Безопасно ли присваивать один указатель другому?..
Здравствуйте, okman, Вы писали:
O>Как думаете, возможно ли в C или C++ получить какой-нибудь побочный эффект во время
O>присваивания одного указателя другому? Т.е., упрощенно говоря, может ли программа упасть
O>на выполнении простой конструкции типа x = y? Считаем, что x и y — это самые обычные
O>"сырые" указатели, т.е. не смарт-поинтеры, не классы с переопределенным оператором
O>присваивания и ничего такого, а просто самые обычные указатели:
O>
O>Или такое присваивание всегда безопасно, даже если сами указатели содержат null или "мусор"?
Здесь главный вопрос:
Как связаны между собой SomeType и AnotherType???
Если это совершенно разные типы (никак не связянные наследованием) — то это ИМХО не безопасно
В общем, я бы сделал так:
O>Как думаете, возможно ли в C или C++ получить какой-нибудь побочный эффект во время
O>присваивания одного указателя другому? Т.е., упрощенно говоря, может ли программа упасть
O>на выполнении простой конструкции типа x = y? Считаем, что x и y — это самые обычные
O>"сырые" указатели, т.е. не смарт-поинтеры, не классы с переопределенным оператором
O>присваивания и ничего такого, а просто самые обычные указатели:
O>
O>SomeType * x;
O>AnotherType * y;
O>//
O>// здесь много разного кода.
O>// x и y присваиваются всякие значения,
O>// а может и не присваиваются...
O>//
O>x = y;
O>
O>Или такое присваивание всегда безопасно, даже если сами указатели содержат null или "мусор"?
Здесь главный вопрос:
Как связаны между собой SomeType и AnotherType???
Если это совершенно разные типы (никак не связянные наследованием) — то это ИМХО не безопасно
В общем, я бы сделал так:
if (dynamic_cast<SomeType*>(y))
{
x = y;
}
Re: Безопасно ли присваивать один указатель другому?..
Здравствуйте, okman, Вы писали:
O>Как думаете, возможно ли в C или C++ получить какой-нибудь побочный эффект во время
O>присваивания одного указателя другому? Т.е., упрощенно говоря, может ли программа упасть
O>на выполнении простой конструкции типа x = y? Считаем, что x и y — это самые обычные
O>"сырые" указатели, т.е. не смарт-поинтеры, не классы с переопределенным оператором
O>присваивания и ничего такого, а просто самые обычные указатели:
Переопределение оператора присваивания — здесь НЕ в тему (присваиваются всё-таки указатели, а не сами объекты) — так что этого бояться не нужно.
O>
O>Или такое присваивание всегда безопасно, даже если сами указатели содержат null или "мусор"?
Здесь главный вопрос:
Как связаны между собой SomeType и AnotherType???
Если это совершенно разные типы (никак не связянные наследованием) — то это ИМХО не безопасно
В общем, я бы сделал так:
O>Как думаете, возможно ли в C или C++ получить какой-нибудь побочный эффект во время
O>присваивания одного указателя другому? Т.е., упрощенно говоря, может ли программа упасть
O>на выполнении простой конструкции типа x = y? Считаем, что x и y — это самые обычные
O>"сырые" указатели, т.е. не смарт-поинтеры, не классы с переопределенным оператором
O>присваивания и ничего такого, а просто самые обычные указатели:
Переопределение оператора присваивания — здесь НЕ в тему (присваиваются всё-таки указатели, а не сами объекты) — так что этого бояться не нужно.
O>
O>SomeType * x;
O>AnotherType * y;
O>//
O>// здесь много разного кода.
O>// x и y присваиваются всякие значения,
O>// а может и не присваиваются...
O>//
O>x = y;
O>
O>Или такое присваивание всегда безопасно, даже если сами указатели содержат null или "мусор"?
Здесь главный вопрос:
Как связаны между собой SomeType и AnotherType???
Если это совершенно разные типы (никак не связянные наследованием) — то это ИМХО не безопасно
В общем, я бы сделал так:
if (dynamic_cast<SomeType*>(y))
{
x = y;
}