gpt4 book ai didi

C++为对象分配存储而不初始化它?

转载 作者:太空狗 更新时间:2023-10-29 21:00:35 28 4
gpt4 key购买 nike

是否有一个公认的习惯用法来为对象就地分配后备存储但不对其进行初始化?这是我天真的解决方案:

#include <utility>

template<typename T>
union Slot {
T inst;

Slot() {}
~Slot() {}

template<typename... Args>
T* init(Args&&... args) { return new(&inst) T(std::forward<Args>(args) ...); }
void release() { inst.~T(); }
};

我的直接用例是一个对象池,但它也更有用。

最佳答案

在 C++11 中,您可以使用 std::aligned_storage(see also):

template<typename T> 
struct Slot {
typename std::aligned_storage<sizeof(T)>::type _storage;

Slot() {}
~Slot() {
// check if destroyed!
...
}

template<typename... Args>
T* init(Args&&... args) {
return new(address()) T(std::forward<Args>(args) ...);
}

void release() { (*address()).~T(); }

T* address() {
return static_cast<T*>(static_cast<void*>(&_storage));
}
};

关于C++为对象分配存储而不初始化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21789349/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com