Xin lỗi, tôi không thể dán mã cụ thể.
Tôi hy vọng mẫu nhỏ này là đủ:Tại sao std :: list muốn gọi cấp phát của tôi không có đối số?
Hãy nói rằng tôi có một cấp phát như thế này:
template <class T>
class MyAllocator
{
// ... typedefs
MyAllocObject _allocObject;
public:
MyAllocator() {
// _allocObject = new ..
}
MyAllocator(const MyAllocator& alloc) {
_allocObject = alloc.getAllocObject();
}
template <class U>
MyAllocator(const MyAllocator<U>& alloc) {
_allocObject = alloc.getAllocObject();
}
MyAllocator(const MyAllocObject& allocObject) {
_allocObject = allocObject;
}
inline pointer allocate(size_type size) {
return _allocObject->alloc(size);
}
// other functions
};
Và được sử dụng như thế này:
MyAllocObject object;
MyAllocator<int> myAlloc(object);
std::list<int, MyAllocator<int> > list(myAlloc);
tôi có kinh nghiệm, mà nếu mặc định constructor bị thiếu, mã không biên dịch, vì vậy tôi đã thêm nó.
Nhưng vấn đề là, rằng tôi phụ thuộc vào đối số đó, bởi vì đó là những gì tôi sử dụng cho phân bổ bộ nhớ tùy chỉnh của tôi.
Tôi có thể làm gì trong trường hợp này?
Trước khi C++ 11, allocators phải b ehave như-nếu không quốc tịch, tức là hai trường hợp cùng loại, bất kể chúng được intialized như thế nào, phải được trao đổi. (Yêu cầu này xuất phát từ các yếu tố chuyển động từ thùng chứa này sang vùng chứa khác) C++ 11 thêm yêu cầu cho người cấp phát nhà nước. Trước C++ 11, những người cấp phát phải cư xử như-nếu không quốc tịch, tức là hai trường hợp cùng loại, bất kể chúng được intialized như thế nào, phải được trao đổi. C++ 11 thêm yêu cầu cho người cấp phát nhà nước: http://stackoverflow.com/questions/6861046/compiler-support-for-stateful-allocators-in-stl-containers – peterchen
Bạn đang làm việc với nền tảng, trình biên dịch và tùy chọn nào? – Niall
@Niall: Tôi muốn mở rộng một chút trước khi đăng bài dưới dạng câu trả lời. Thực hiện :) - thật không may, tôi không thể tìm thấy một giới thiệu tốt đẹp để sử dụng phân bổ stateful. – peterchen