2016-04-19 4 views
2

SharedFreeList имеет правильный метод, но я не вижу, как освободить все узлы в FreeList:Как я могу освободить все элементы FreeList?

module runnable; 

import std.experimental.allocator.building_blocks; 
import std.experimental.allocator.mallocator; 
import std.experimental.allocator; 

shared SharedFreeList!(Mallocator, 0, unbounded) heap1; 
FreeList!(Mallocator, 0, unbounded) heap2; 

shared static ~this() 
{ 
    heap1.deallocateAll; // OK 
} 

static ~this() 
{ 
    heap2.deallocateAll; // no prop deallocateAll for... 
} 

Хотя этот пример не имеет смысла, я могу хотеть сделать то же самое в классе деструктор. С определенными статическими параметрами FreeList.deallocateAll, кажется, деактивирован, однако должен быть способ освободить все узлы в списке, правильно?

ответ

4

по DOC:

Определено, только если ParentAllocator определяет deallocateAll. Если это так, перейдите к нему и сбрасывает фриланс.

Вы используете Mallocator, у которого нет deallocateAll, поэтому вы не можете его использовать. Но SharedFreeList имеет собственную реализацию deallocateAll.

Поэтому я, вероятно, создаю проблему на https://issues.dlang.org. Потому что я верю, что такой же метод можно реализовать и для FreeList.

+0

это прозрачный, согласен. –

+0

Я не смотрел на реализацию 'FreeList', но он мог отслеживать только свободные объекты, а не любые объекты, которые были выделены. В этом случае было бы невозможно реализовать 'deallocateAll'. –