2015-09-23 30 views
8

numaralı telefona belleği doğru şekilde ayırma std::vector'u bir programlama alıştırması olarak uygulamaya çalışıyorum.Vektör

Aşağıdaki kod parçasını inceleyin:

template <class T, class Allocator = std::allocator<T>> 
class vector 
{ 
public: 
    using size_type = size_t; 
    using allocator_type = Allocator; 
    ... 
private: 
    T* m_data; 
    allocator_type m_alloc; 
    size_type m_capacity; 
    ... 
}; 

m_dataT* yazın sahiptir. std::allocator_traits<allocator_type>::pointer'u döndüren std::allocator_traits<allocator_type>::allocate(m_alloc, m_capacity) kullanarak belleği ayırmam gerekiyor.

Ben pointer dolaylı T* için döküm ve m_data için allocate döndü değeri atamak edilebileceğini kabul edebilir?

Değilse, belleği vector içinde doğru şekilde nasıl ayırabiliriz?

+0

Kendi ayırıcınızı yapabilirsiniz. –

+0

İlgili: http://stackoverflow.com/q/28521203/ – dyp

cevap

7

m_data üyeliğinizi Allocator::pointer yapmalısınız. (Standart arabirimi izlemek istiyorsanız, vektörünüzde bu tür bir yerel takma ad oluşturmalısınız.)

Türü, bazı belirtecilerin Boost.Interprocess gibi ham işaretçilerle ilgilenmediğinden yapılandırmaya bağlı olarak akıllı göstericileri kullanabilen bellek ayırıcı.

+0

Eğer 'm_data'' Allocator :: pointer' olarak tanımlanırsam, std :: vector :: data() 'işlevi ne olmalıdır? Dönüş tipi 'T *' dir. – Hrant

+0

@Hrant 'std :: addressof (* m_data)' öğesini döndürmelisiniz –