Как я могу хранить объекты Swift/Objective-C с автоматическим подсчетом ссылок на карте C++, не вызывая утечек памяти прC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Как я могу хранить объекты Swift/Objective-C с автоматическим подсчетом ссылок на карте C++, не вызывая утечек памяти пр

Сообщение Гость »


У меня есть карта C++, которая управляет загруженными регионами. С каждым регионом связан MTLBuffer для геометрии, созданной после преобразования данных региона в сетку. Идея состоит в том, чтобы сохранить ссылку на каждый буфер внутри карты C++, чтобы все регионы и связанные с ними данные были в одной структуре данных. Я мог бы использовать этот псевдокод Objective-C++:

struct Region { недействительный *буфер; // Другие поля }; std::unordered_map loading_regions; void render_region(Регион *region) { вершины с плавающей запятой[MAX_SIZE]; беззнаковая длина; // ... // Есть несколько способов сделать это. Одним из них может быть: map[positon].buffer = [device newBufferWithBytes: длина вершин: параметры длины: MTLStorageModeShared]; // Я также мог бы передать «вершины» какой-нибудь внешней функции, определенной в Swift, которая создает новый «MTLBuffer» и возвращает его. // Затем он преобразуется в простой указатель и сохраняется на карте. } Однако, когда регионы удаляются с карты, например, с помощью такой функции:

void delete_region(uint16_t позиция) { Регион *регион = загруженные_регионы[позиция]; // ... карта.стирание(позиция); удалить позицию; } Как я могу гарантировать, что все сохраненные ссылки на объекты Swift или ссылки на объекты Objective-C будут правильно освобождены и не будет вызвана утечка памяти, если у меня включен ARC?

Возможно ли это, или мне просто нужно будет создать Swift Dictionary или Objective-C NSDictionary для хранения этих буферов независимо от карты C++, в которой хранится действие регионы?

Когда ARC включен, Xcode не позволит использовать сообщения release напрямую, поэтому я не знаю, как еще вручную освободить память.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»