Sol использует автоматическое управление памятью, посредству использования автоматического подсчета ссылок. Ссылочными типами являются все экземпляры классов. Все остальные типы не являются ссылочными и копируются при перемещении. Так же функции могут принимать ссылки на не ссылочные типы данных. Ссылки на не ссылочные типы данных нельзя возвращать из функций, если они являются переменными этой функции. При вызове конструктора класса можно так же указать ключевое слово local, означающее, что данным объектом может владеть только одна переменная или только одно поле класса или структуры. При попытке присвоить локальное значение другой переменной возникает ошибка. Если все же нужно передать значение в функцию либо записать значение в переменную, то требуется либо использовать ключевое слово move или взять ссылку на переменную, которая хранит локальное значение.
// пример с ссылочным типом данных
class MutString {
let value: String = ""
func set_value(value: String) {
self.value = value
}
}
func main {
let a = MutString()
let b = a
b.set_value("hello")
io.print(a)
// >> hello
}
struct Integer(value: Int)
func main {
let a = Integer(10)
let b = a
b.value = 20
print(a)
// >> 10
}