# Указатели

Указатели Vala позволяют управлять памятью вручную. Обычно когда вы создаете экземпляр типа вы получаете указатель на него и Vala сама позаботиться о его своевременном удалении объекта, когда к нему не останутся доступные ссылки. Запрашивая указатель вместо ссылки вы берете на себя ответственность за удаление объекта, следовательно, вы получаете больший контроль над использованием памяти.

Эта функциональность не всегда необходима, т.к. современные компьютеры достаточно производительны, чтобы осуществлять подсчет ссылок и имеют достаточно памяти, поэтому небольшие потери памяти при этом не так существенны. Ручное управление памятью может понадобиться, когда:

Вы хотите оптимизировать определенную часть программы.

Когда вы работаете с библиотекой, не имеющей подсчета ссылок (если она не основана на gobject).

Для создания объекта и получения указателя на него пишем:

```csharp
Object* o = new Object();
```

Для использования членов объекта:

```csharp
o->method_1();
o->data_1;
```

Для освобождения памяти, на которую ссылается указатель:

```csharp
delete o;
```

Vala поддерживает извлечение адреса (&) и разыменование указателя (\*):

```csharp
int i = 42;
int* i_ptr = &i;    //  адрес переменной
int j = *i_ptr;     // разыменование
```

Поведение при этом немножко отличается от ссылок, т.к. вы можете получить адрес и разыменовать во время присвоений:

```csharp
Foo f = new Foo();
Foo* f_ptr = f;    //  извлечение адреса
Foo g = f_ptr;     // разыменование

unowned Foo f_weak = f;  // эквивалент второй строки
```

Использование указателей на объекты подобно использованию бесхозяйных ссылок.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://vala.gitbook.io/vala/advanced-features/pointers.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
