2015-09-23 20 views
8

Tôi đang cố gắng triển khai std::vector làm bài tập lập trình.Phân bổ chính xác bộ nhớ trong vector

Hãy xem xét các đoạn mã sau:

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_data có kiểu T*. Tôi cần cấp phát bộ nhớ bằng cách sử dụng std::allocator_traits<allocator_type>::allocate(m_alloc, m_capacity) trả về std::allocator_traits<allocator_type>::pointer.

Tôi có thể giả định rằng pointer có thể được đúc hoàn toàn tới T* và chỉ định giá trị được trả lại từ allocate đến m_data?

Nếu không, cách phân bổ bộ nhớ chính xác trong vector?

+0

Bạn có thể tự mình phân bổ. –

+0

Liên quan: http://stackoverflow.com/q/28521203/ – dyp

Trả lời

7

Bạn nên đặt thành viên m_dataAllocator::pointer. (Có lẽ bạn nên tạo bí danh cục bộ của loại đó trong vectơ của mình, nếu bạn muốn làm theo giao diện chuẩn.)

Loại có sẵn vì một số trình phân bổ không xử lý con trỏ thô, như Boost.Interprocess được chia sẻ bộ cấp phát bộ nhớ, có thể sử dụng con trỏ thông minh tùy thuộc vào cấu hình.

+0

Nếu tôi xác định 'm_data' là' Allocator :: pointer', hàm 'std :: vector :: data()' sẽ trả về cái gì? Kiểu trả về của nó là 'T *'. – Hrant

+0

@Hrant Bạn phải trả về 'std :: addressof (* m_data)' –

Các vấn đề liên quan