COM использует эту стратегию удаления экземпляра. COM делает деструктор частным и обеспечивает интерфейс для удаления экземпляра.
Вот пример того, на что был бы похож метод Выпуска.
int MyRefCountedObject::Release()
{
_refCount--;
if ( 0 == _refCount )
{
delete this;
return 0;
}
return _refCount;
}
COM-объекты ATL являются главным примером этого шаблона.
Присваивает значение, если оно еще не присвоено. Примерно так:
a = nil
a ||= 1
a = 1
a ||= 2
В первом примере a будет установлено в 1. Во втором a будет по-прежнему 1.
Если b равно нулю, присвойте ему a.
a = :foo
b ||= a
# b == :foo
Если b не равно нулю, не меняйте его.
a = :foo
b = :bar
b ||= a
# b == :bar
Это «сокращенное присвоение» (см. Справочник по Ruby Pocket, стр. 10)
a = a || b
(означает, что a присваивается значение, образованное логическим или из a, b
становится
a || = b
Почти все операторы имеют сокращенную версию (+ = * = && = и т. д.) .
Я могу только догадываться, но я предполагаю, что это означает логический оператор в сочетании с установкой переменной (например, ^ =, + =, * = на других языках)
так x || = y
совпадает с x = x || y
edit: я угадал, см. http://phrogz.net/ProgrammingRuby/language.html#table_18.4
x = x || y
означает: использовать x, если установлено, иначе назначить y. его можно использовать для обеспечения хотя бы инициализации переменных (0, пустой массив и т. д.)