gpt4 book ai didi

c++ - 转换 unique_ptr 的类型安全吗?

转载 作者:行者123 更新时间:2023-11-27 22:57:26 25 4
gpt4 key购买 nike

template <class T> class Foo {};

class Manager {
std::unordered_map<size_t, std::unique_ptr<std::vector<void *>>> _mFoos;

public:
template <class T> void addFoo(Foo<T> &foo) {
int x = typeid(T).hash_code();

// Safe ? :
auto &p = *(reinterpret_cast<std::unique_ptr<std::vector<Foo<T>>> *>(&_mFoos[x]));

if (p == nullptr) {
p.reset(new std::vector<Foo<T>>);
}

auto &foos = *p;
foos.push_back(foo);
};

template <class T> Foo<T> &getFoo(int index) {
int x = typeid(T).hash_code();
auto it = _mFoos.find(x);

auto &foos = *(reinterpret_cast<std::vector<Foo<T>> *>(it->second.get()));

return foos[index];
};
};

如果 T 和 T2 是两种不同的类型,则在 unique_ptr 中重新解释转换 unique_ptr 是否安全且可移植?它们是否具有相同的大小和相同的位模式?

最佳答案

没有。

根据严格的别名规则,不相关类型之间的转换(不同的模板实例是不相关的类型)是未定义的行为。

关于c++ - 转换 unique_ptr 的类型安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31320351/

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