一段时间以来,我一直在使用Raw指针,现在我正在尝试使用智能指针。
如果ClassB是ClassA的子级。
我可以使用原始指针做到这一点。
ClassA* ptr = new ClassB;
此行将等同于上面的行。
std::shared_ptr<ClassA> ptr = std::shared_ptr<ClassB>(new ClassB);
当ptr超出范围时,内存将被清除。
答案 0 :(得分:3)
Kinda是的。
Kinda是因为std::shared_ptr
比原始指针慢。如果您在其他地方传递了共享指针的副本,则不会释放对象,但是一旦所有共享指针的对象都消失了,它将被释放。
此外,引用计数器跟踪器是安全线程。
此外,ClassA
不需要虚拟析构函数即可使共享指针正常工作。
您可以想象,这些功能非常昂贵。
如果需要与原始指针相同的性能,则可以利用std::unique_ptr
来实现。但是,它是不可复制的,其用法可能会使C ++ 11中新引入的语言感到困惑。
除此之外,建议使用std::make_shared
和std::make_unique
初始化所述智能指针。
答案 1 :(得分:1)
您是否在代码中尝试过?
我认为您可以直接完成std::shared_ptr<ClassA> ptr(new ClassB)
。