owned and unowned pointer types