我已经使用原始指针有一段时间了,现在我正在尝试使用智能指针。
如果 ClassB 是 ClassA 的子级。
我可以使用原始指针来做到这一点。
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_shared
和 std::make_unique
来初始化所述智能指针。
关于c++ - 智能指针的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57702591/