智能指针的投射

Casting of smart pointers

本文关键字:指针 智能      更新时间:2023-10-16

我已经使用原始指针一段时间了,现在我正在尝试使用智能指针。

如果 B 类是 A 类的子级。

我可以用原始指针来做到这一点。

ClassA* ptr = new ClassB;

这条线会等同于上面的线吗?

std::shared_ptr<ClassA> ptr = std::shared_ptr<ClassB>(new ClassB);

当 PTR 超出范围时,内存将被清除。

有点是的。

有点是因为std::shared_ptr比原始指针慢。如果您将共享指针的副本传递到其他地方,则对象不会被释放,但是一旦指向它的所有共享指针都消失了,它就会被释放。

此外,参考计数器跟踪器是安全线程。

此外,ClassA不需要虚拟析构函数即可使共享指针正常工作。

可以想象,这些功能非常昂贵。

如果您需要与原始指针相同的性能,则可以通过使用std::unique_ptr来实现它。但是,它是不可复制的,它的用法可能会混淆新引入的 C++11。

除此之外,建议使用std::make_sharedstd::make_unique来初始化所述智能指针。

你在代码中试过吗?

我认为你可以直接std::shared_ptr<ClassA> ptr(new ClassB)做。