LINUX.ORG.RU
Ответ на: комментарий от asaw

Круто, чо. Но чревато, опять же, странным поведением.

Xellos ★★★★★
()
Ответ на: комментарий от UVV

Я немного сократил, в оригинале было так:

Компилятор имеет полное право выбросить и сам ассерт и следующую за ним проверку, а в рантайме засегфолтиться. Кстати, clang в некоторых случаях об этом честно предупреждает.

Dendy ★★★★★
()

Такой код будет иметь смысл, если, например, MyClass::method — это коллбэк из библиотеки на другом языке (C, допустим).

oneliner
()
Ответ на: комментарий от unt1tled

Это как раз следствие того, что Android != Java.

mono ★★★★★
()
Ответ на: комментарий от UVV

Я немного сократил, в оригинале было так:

Ну ассерт для дебажной сборки, что бы резко и по пальцам получить. А условие для релизной сборки, что бы сделать вид, что мы следим за ошибками.

andreyu ★★★★★
()
Ответ на: комментарий от next_time

если же сразу после SomeClass* x; идёт x->func(), то, очевидно, это быдлокод.

А ничего, что это равносильно func(x)? И если внутри func нет обращения к мемберу инстанса на который указывает x, то и проблемы нет.

andreyu ★★★★★
()
Ответ на: комментарий от next_time

но не наоборот. у ТСа явно метод класса, но не функция.

g0t0
()
Ответ на: комментарий от Xellos

зато, можно делать так:

(x+1)->func();

что в обычных языках либо невозможно, либо приводит к ненужному оверхеду

next_time ★★★★★
()

Есть такое. Плюсы созданы, чтобы поверить в ад на Земле.

Solace ★★
()
Ответ на: комментарий от mono

Активити прибивается на уровне фреймворка, то есть объект переходит в состояние destroyed. Сам java-объект, если на него есть ссылки никуда не денется.

crowbar
()
Ответ на: комментарий от crowbar

Эмм. Почему тогда во фрагментах очень легко получить NPE при getActivity()?

Или к тому времени уже и java-объект разрушается?

Да и вообще, контекст-то дохлый. Что в таком случае будет с this?

mono ★★★★★
()
Ответ на: комментарий от mono

Почему тогда во фрагментах очень легко получить NPE при getActivity()?

Потому что fragment вполне может быть отсоединен от activity. Нужно следить за его жизненным циклом.

Да и вообще, контекст-то дохлый. Что в таком случае будет с this?

Дохлый то он дохлый, но если программист сохранил на него ссылку, java-объект никуда уже не денется, хотя с точки зрения стандартной библиотеки андроида компонент уничтожен. Это разные уровни абстракции.

crowbar
()

Плюсов не знаю, но вставлю 5 копеек. ;)

MyClass::method()
{
    assert(this);
    /* whatever */
}
beastie ★★★★★
()
Ответ на: комментарий от crowbar

Хоророшо, с фрагментом плохой пример.

Допустим у нас есть две Activity. В первой запускаем вторую (в отдельной таске) и сохраняем во второй Acitivity ссылку на первую, например, через статическое поле. Потом первая Activity уходит к праотцам по каким-то причинам.

Ты хочешь сказать, что несмотря на то, что на уровне фреймворка Activity будет дохлой, ссылка на неё не будет null?

mono ★★★★★
()
Ответ на: комментарий от mono

Ты хочешь сказать, что несмотря на то, что на уровне фреймворка Activity будет дохлой, ссылка на неё не будет null?

Ну конечно. Не вижу ни одной причины, почему она должна обнулиться.

crowbar
()
Ответ на: комментарий от crowbar

Что-то я сильно на этот счёт сомневаюсь. Надо поэкспериментировать.

mono ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.