vala
English
English
  • Учебник Vala
  • Основы
    • Элементы языка
      • Типы данных
      • Управляющие конструкции
      • Методы
      • Делегаты
      • Лямбды / Замыкания
      • Пространства имён
      • Структуры
      • Классы
    • ООП
      • Основы
      • Конструктор
      • Деструктор
      • Сигналы
      • Свойства(Properties)
      • Наследование
      • Абстрактные классы
      • Интерфейсы / Миксины
      • Полиморфизм
      • Сокрытие методов
      • Информация о типах времени выполнения(Run-Time Type Information)
      • Динамическое приведение типов(Dynamic Type Casting)
      • Универсальные шаблоны(Generics)
      • Создание объектов в стиле GObject
      • Интеграция с D-Bus
      • Профили(Другие бэкенды помимо GLib)
  • Продвинутые возможности
    • Ассерты и контрактное программирование
    • Обработка ошибок
    • Управление параметрами
    • Методы с поддержкой синтаксиса
    • Многопоточность
    • Главный цикл(The Main Loop)
    • Асинхронные методы(Coroutine)
    • Слабые ссылки(Weak References)
    • Список аргументов переменной длины
    • Указатели
    • Классы не наследующие Object
    • Коллекции
      • Введение
      • HashSet<G>
      • ArrayList<G>
      • HashMap<K,V>
      • Lock-free структуры
  • Экспериментальные фичи
    • Введение
    • Строгий не null режим(Rust mode)
    • Литералы регулярных выражений(regexp)
    • Цепочки связанных выражений
  • Использование и создание библиотек
    • Введение
    • Инструменты
    • Генерирование VAPI файла из предыдущего с помощью vapigen.
    • Использование библиотек
    • Создание библиотеки
    • Vala and C
    • Meson
      • Config file
      • Static Library
      • Shared Library
      • Target GLib Version
  • Технические приёмы
    • Unit тестирование
    • Отладка
    • Использование GLib
  • Продвинуты гайд(WIP)
  • Functional Programming
    • Gpseq
    • Compose
  • Examples
    • Basic
    • GTK
      • Базовые GTK программы
      • Flappy Bird(WIP)
      • DnD
    • Websocket
  • Apps
    • Games
  • Meson-Book
    • MesonBook
    • Wrap
    • Crosscompile
    • Object files
    • Library
    • Executable
    • Code Generation
    • Installing
    • Unit Tests
    • Meson 0.54
    • Meson 0.53
  • golang-book
    • Ваша первая программа
    • Типы
    • UPDATE.MD
Powered by GitBook
On this page

Was this helpful?

  1. Продвинутые возможности

Указатели

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

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

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

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

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

Object* o = new Object();

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

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

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

delete o;

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

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

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

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

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

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

PreviousСписок аргументов переменной длиныNextКлассы не наследующие Object

Last updated 6 years ago

Was this helpful?