铸造智能指针

时间:2019-08-29 03:27:01

标签: c++ c++11

一段时间以来,我一直在使用Raw指针,现在我正在尝试使用智能指针。

如果ClassB是ClassA的子级。

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

 ClassA* ptr = new ClassB;

此行将等同于上面的行。

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

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

2 个答案:

答案 0 :(得分:3)

Kinda是的。

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

此外,引用计数器跟踪器是安全线程。

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

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

如果需要与原始指针相同的性能,则可以利用std::unique_ptr来实现。但是,它是不可复制的,其用法可能会使C ++ 11中新引入的语言感到困惑。

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

答案 1 :(得分:1)

您是否在代码中尝试过?

我认为您可以直接完成std::shared_ptr<ClassA> ptr(new ClassB)