class A { int i;}; class B { A *p; public: B(){p=newA;}~B(){ delete p; }}; void sayHello(B b) { cout << "Hello" << endl;} int main() { B b; sayHello(b); return 0;}这段代码的C++ STL风格安全写法是
时间: 2024-03-22 14:37:22 浏览: 101
这段代码的 C++ STL 风格安全写法可以使用智能指针 `std::unique_ptr` 来管理内存。`std::unique_ptr` 是一个模板类,它的实例拥有对于特定类型的单个对象的独占权,可以确保在所有权转移时自动释放对象。
下面是使用 `std::unique_ptr` 的代码:
```
#include <memory>
#include <iostream>
class A { int i; };
class B { std::unique_ptr<A> p; public: B() : p(new A) {} };
void sayHello(const B& b) { std::cout << "Hello" << std::endl; }
int main() {
B b;
sayHello(b);
return 0;
}
```
在上述代码中,类 `B` 中的指针 `p` 被改为使用 `std::unique_ptr` 管理,这样在 `B` 类的析构函数中就不需要手动释放内存了。在 `sayHello` 函数中,`B` 类型的对象 `b` 被传递进来时,使用了常引用来避免拷贝构造,同时还添加了 `const` 关键字来保证函数不会修改对象的状态。
阅读全文