Tôi biết trong hoàn cảnh bình thường làm thế nào để chăm sóc bộ nhớ de-phân bổ. Trường hợp của tôi hơi khác một chút.xóa nhà điều hành - cách triển khai?
Tôi đang triển khai nhóm bộ nhớ của riêng mình. Tôi muốn khách hàng của lớp học của tôi gần với phương pháp phân bổ và phân bổ chung.
inline void* operator new(size_t dead_param, CPool& objPool)
{
return objPool.Allocate();
}
tôi có chức năng toàn cầu này, vì vậy mà người dùng của lớp học của tôi chỉ đơn giản là có thể gọi
Base baseObj = new (poolObj)Base2();
Bây giờ tôi không biết làm thế nào để gọi destructor? Tôi clearl có NO IDEA
dù tôi có nhà điều hành toàn cầu xóa
inline void operator delete(void* ptr, CPool& objPool)
{
objPool.DeAllocate(ptr);
}
xin vui lòng hướng dẫn .. làm thế nào tôi có thể nhận được chức năng này được gọi là từ mã khách hàng? Với những thay đổi nhỏ nhất đối với cú pháp từ phía người dùng. Cũng xin lưu ý rằng tôi không muốn người dùng mã của mình triển khai operator new
và operator delete
và gọi Allocate
và DeAllocate
từ đó.
Tại sao không chỉ có những người gọi 'Base * baseObj = poolObj.Allocate(); ' – Barry
Cú pháp cho khách hàng có vẻ hơi xấu xí. 'Base * baseObj = (Base *) poolObj.Allocate()'. Yuck .. typecasting ... rằng mặc dù tôi đã giữ như là khu nghỉ mát cuối cùng .. Cũng kể từ khi không thể có được chức năng này được gọi là, tôi curous bây giờ .. – Adorn
Vị trí xóa chỉ bao giờ được gọi từ bên trong vị trí mới, khi một nhà xây dựng thoát một ngoại lệ. Trong tất cả các trường hợp khác, một toán tử 'bình thường 'xóa (void *)' được gọi. Bạn có nghĩa vụ phải stash đầy đủ thông tin vào khối bộ nhớ được phân bổ để có thể deallocate nó sau này, không có đầu vào bổ sung. Thông thường, người cấp phát sẽ viết thông tin bổ sung tại offset âm từ con trỏ nó trả về. –