7 ms·
Sometimes your just need a buffer for a syscall. Newing a buffer is canonical and unique_ptr isn’t free enough to use in the most performance sensitive contexts
by ipmifatwa 7y ago
Sometimes your just need a buffer for a syscall. Newing a buffer is canonical and unique_ptr isn’t free enough to use in the most performance sensitive contexts.
- a_t48 7y agoCan you give an example of unique_ptr being too heavy?
- fnbr 7y agoI worked with a team which used raw pointers instead of unique_ptr as they use more memory (twice as much, I think). The core data structure was a tree, and the tree was several hundred GB in size. So they were doing whatever they could to shave off memory.
- de_watcher 7y agoWithout a custom deleter unique_ptr should have zero overhead.
- likeliv 7y agounique_ptr does not have any memory overhead. (unless you use a custom deleter, but even then you could use one which does not use memory)
- tcbawo 7y agoUnique pointers imply ownership of the underlying memory. If you have multiple references to the same data, or in your case a tree, it might make sense to use raw pointers (or references) to access the tree data. It would not make sense to grant ownership of the same memory to two unique_ptr, or make copies of data unnecessarily.
- inetknght 7y agoIn that case, you'd have something like `std::vector` or `std::unique_ptr` which owns the actual allocation (and governs the scoping and therefore deallocation), while using `vector.data()` or `unique_ptr.get()` to pass around an unowned pointer. All raw pointers can then be considered to be unowned by convention.