gpt4 book ai didi

C++ - 指针和 'smart pointers'

转载 作者:太空宇宙 更新时间:2023-11-04 13:52:37 25 4
gpt4 key购买 nike

我正在学习如何正确使用指针和“智能指针”来防止内存泄漏。这是我正在分析的一段伪代码。[ ClassA 和 ClassB 继承 BaseClass; ExtClass 只是一些外部类(与 BaseClass 无关]

main(){
ExtClass *extPtr = new ExtClass();

BaseClass *ptr = new ClassA();
extPtr->setPtr(ptr);
extPtr->fun();

...

if(change_object()) {
delete ptr;
ptr = new ClassB();

extPtr->setPtr(ptr);
extPtr->fun();
}
}
-------------------------------------
ExtClass {
private:
BaseClass *m_ptr;

public:
~ExtClass() { delete m_ptr; }

void ExtClass::fun(){
m_ptr->do_some_stuff();
}

void ExtClass::setPtr(BaseClass *ptr){
m_ptr = ptr;
}
}

问题:

  1. 上面的例子是否正确?我的意思是不会有任何泄漏,对吧?
  2. 是否有可能以某种方式在 ExtClass 中保留普通指针,并将“BaseClass *ptr”替换为 unique_ptr?或者它应该是 shared_pointer?

最佳答案

好的,对于基类,如果退出函数,extPtr 将被泄漏。

要将智能指针与另一个交换,我相信这就是您想要的:http://en.cppreference.com/w/cpp/memory/unique_ptr/swap

顺便说一句,我在您的代码中根本看不到任何智能指针。

关于C++ - 指针和 'smart pointers',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22880396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com