ssm>С твоим конструктором копирования, реализованным посредством оператора присваивания все будет в порядке, тоесть будет брошено исключение, и объект не будет создан. ssm>С оператором присваивания все хуже, ведь он вызывается для уже существующего объекта, и если произойдет исключение при вызове оператора= для canThrow1 или canThrow1, то объект класса One останется в некорректном состоянии ssm>При обратной реализации(c временным объектом) этого не произойдет.
Согласен, но моя реализация не претендует на повсеместное использование.
В большинстве случаев при выбросе исключения мне уже будет все равно, что там с объектом, которого я пытаюсь создать — он новый и никакой( в большинстве случаев) полезной информации не несет и дальнейшее его использование( полсе обработки исключения ) не имеет смысла( опять же в большинстве случаев)
КЛ>Согласен, но моя реализация не претендует на повсеместное использование. КЛ>В большинстве случаев при выбросе исключения мне уже будет все равно, что там с объектом, которого я пытаюсь создать — он новый и никакой( в большинстве случаев) полезной информации не несет и дальнейшее его использование( полсе обработки исключения ) не имеет смысла( опять же в большинстве случаев)
Константин, ты путаешь вызов конструктора копирования для еще несуществующего объекта и оператора присваивания для уже созданного объекта.
Здравствуйте, ssm, Вы писали:
ssm>Здравствуйте, Константин Ленин, Вы писали:
КЛ>>Согласен, но моя реализация не претендует на повсеместное использование. КЛ>>В большинстве случаев при выбросе исключения мне уже будет все равно, что там с объектом, которого я пытаюсь создать — он новый и никакой( в большинстве случаев) полезной информации не несет и дальнейшее его использование( полсе обработки исключения ) не имеет смысла( опять же в большинстве случаев)
ssm>Константин, ты путаешь вызов конструктора копирования для еще несуществующего объекта и оператора присваивания для уже созданного объекта.
Да, ему кирдык, но
1)в !!! он мне уже не нужен, смотри пункт 2
2)Код не в тему, я говорю про реализацию копирования через присвоение
т.е.
SomeClass *c;
SomeClass c1(....);
try
{
c = new SomeClass(c1);
}
catch(){}
//бессмысленный код)
c->SomeMethod() //Если при вызове конструктора копирования выбрасывется эксепшн, мне этот объект уже не нужен
Здравствуйте, ssm, Вы писали:
ssm>Здравствуйте, Константин Ленин, Вы писали:
КЛ>>2)Код не в тему, я говорю про реализацию копирования через присвоение
ssm>А я говорю о том что оператор= при твоей реализации приводит к ошибкам при его использовании
МОЙ оператор не может привести к ошибкам, приветсти к ошибкам могут операторы=, который монут выкинуть исключение. Я просто написал пример, как можно сделать в НЕКОТОРЫХ случаях
Здравствуйте, Константин Ленин, Вы писали:
КЛ>приветсти к ошибкам могут операторы=, который монут выкинуть исключение.
только те которые оставят объект в испорченном состоянии