Đây là một câu hỏi đáng xấu hổ, nhưng ngay cả tài liệu được viết tốt được cung cấp với boost.interprocess chưa đủ để tôi tìm ra cách để làm điều này.C++ phân bổ, đặc biệt là vượt qua các đối số constructor cho các đối tượng được phân bổ với boost :: interprocess :: cached_adaptive_pool
gì tôi có là một ví dụ cached_adaptive_pool cấp phát, và tôi muốn sử dụng nó để xây dựng một đối tượng, đi dọc theo thông số nhà xây dựng:
struct Test {
Test(float argument, bool flag);
Test();
};
// Normal construction
Test obj(10, true);
// Normal dynamic allocation
Test* obj2 = new Test(20, false);
typedef managed_unique_ptr<
Test, boost::interprocess::managed_shared_memory>::type unique_ptr;
// Dynamic allocation where allocator_instance == cached_adaptive_pool,
// using the default constructor
unique_ptr obj3 = allocator_instance.allocate_one()
// As above, but with the non-default constructor
unique_ptr obj4 = allocator_instance ... ???
này rất tốt có thể là một thất bại trên một phần của tôi về cách sử dụng các đối tượng cấp phát nói chung. Nhưng trong mọi trường hợp, tôi không thể xem cách sử dụng trình phân bổ cụ thể này, với giao diện được chỉ định trong cached_adaptive_pool để truyền các đối số hàm tạo cho đối tượng của tôi.
cached_adaptive_pool
có phương pháp: void construct(const pointer & ptr, const_reference v)
nhưng tôi không hiểu điều đó có nghĩa là gì và tôi không thể tìm thấy ví dụ sử dụng nó.
Đầu của tôi đã được bơi trong các mẫu cả ngày, do đó, một bàn tay giúp đỡ, ngay cả khi câu trả lời là hiển nhiên, sẽ được đánh giá cao.
Cảm ơn. Hình thức đầu tiên là loại câu trả lời tôi mong đợi, nhưng đã quá bối rối và mệt mỏi để nhận ra bản thân mình. Dạng thứ hai 'a.construct (p, 30, true)' dường như không được hỗ trợ bởi bộ cấp phát tăng cường cụ thể này. Khá khó chịu, vì 'cached_adaptive_pool.construct()' trả về 'void', tôi phải viết' allocator_t :: pointer obj = allocator.allocate_one(); allocator.construct (obj, Test (30, true)) '? Tôi không chắc chắn những gì tồi tệ hơn, bằng cách sử dụng hai báo cáo cho một hoạt động đơn giản hoặc sử dụng một vị trí hơi lạ tìm kiếm mới trực tiếp. – porgarmingduod
Bạn có thể làm cho một chức năng riêng biệt. – UncleBens