我有这个函数,它将派生自容器的任何类添加Object
到容器中。
template<class T> void registerObject(T& object) {
auto sp = std::shared_ptr<T>(&object, [](T*){});
std::shared_ptr<Object> op = std::static_pointer_cast<Object>(sp);
objects_.push_back(op);
}
发生了什么static_pointer_cast
使自定义删除方法对新指针仍然有效?
我问是因为 lambda 不会评估为采用派生类型吗?但是然后转换的指针会将 a 传递Object*
给那个 lambda?那么在调用自定义删除时不会发生一些“向上转换”吗?我认为这是不可能的,因为您不能保证基类型是派生类型?