2015-03-12 17 views
5

Liên quan đến lớp boost::circular_buffer,Nhà xây dựng nhận/thiết lập trình phân bổ mặc định ở đâu?

tôi có thể nhanh chóng một đơn giản như sau:

lớp
#include<boost/circular_buffer.hpp> 
int main() { 
    boost::circular_buffer<double> buffer; 
} 

Các circular_buffer được templatized với

template<typename T, typename Alloc> 
class circular_buffer { 
    ... 
    typedef Alloc allocator_type; 
    ... 
} 

và tôi tin rằng các nhà xây dựng được gọi là

explicit circular_buffer(const allocator_type & = allocator_type()) noexcept; 

Những gì tôi không hiểu là nơi buffer là nhận được phân bổ mặc định của nó? Tài liệu nêu rõ rằng, nếu tài liệu không được cung cấp rõ ràng, đối tượng Default Alloc là std::allocator<T>, nhưng tôi không thấy vị trí này đang được đặt. Tôi không cố gắng thay đổi nó, tôi chỉ cố gắng hiểu thiết kế của lớp này từ một điểm C++/kĩ thuật phần mềm.

Trả lời

3

Lớp nhận kiểu cấp phát như một mẫu đối số:

template<typename T, typename Alloc> 
class circular_buffer { 

và đối số nhà xây dựng chỉ mặc-xây dựng một thể hiện của loại đó.

Nếu bạn sử dụng circular_buffer mà không chỉ định các Alloc mẫu luận nó sử dụng mặc định theo quy định tại tờ khai mẫu cơ sở:

template <class T, class Alloc = BOOST_CB_DEFAULT_ALLOCATOR(T)> 
class circular_buffer; 

này được cất giấu trong circular_buffer_fwd.hpp tiêu đề. Macro đánh giá là std::allocator<T> hoặc tương đương nếu nền tảng không có.

+0

Cảm ơn, tôi đã không nhận ra rằng có một tiêu đề 'circular_buffer_fwd.hpp' được bao gồm. Các tài liệu không đề cập đến nó, nhưng tôi thấy nó ngay bây giờ sau khi nhìn trực tiếp vào tiêu đề trên máy của tôi. – idWinter

3

Tiêu đề circular_buffer_fwd.hpp sẽ chăm sóc của thiết lập các cấp phát mặc định

template <class T, class Alloc = BOOST_CB_DEFAULT_ALLOCATOR(T)> 
class circular_buffer; 
Các vấn đề liên quan