因此,我听说过现代C++风格的一个经验法则是,不应该使用new或delete,而应该使用智能指针.所以当我有一个类,其中一个成员是指向另一个对象的指针时,如何去做.通过使用智能指针我可以避免删除,但我仍然需要用new创建对象.例如,下面是"规范"的现代C++风格,或者应该怎么做呢?
#include
#include
class B {
public:
B () { std::printf("constructing B\n");}
~B () { std::printf("destroying B\n");}
};
class A {
public:
A ()
{
std::printf("constructing A\n");
b = std::unique_ptr(new B());
}
~A () { std::printf("destroying A\n");}
private:
std::unique_ptr b;
};
int main()
{
A a;
return 0;
}
你用new.使用没有任何问题new,它应该尽可能少地使用.
(delete另一方面,几乎从不使用,因为它的使用应始终封装在某种RAII句柄中,如智能指针或容器.)
请注意,使用智能指针时,应始终将结果分配给指定的new智能指针或使用reset.在您的情况下,您想要使用:
A() : b(new B()) { }
Run Code Online (Sandbox Code Playgroud)
要么:
A()
{
std::unique_ptr<B> x(new B());
b = std::move(x);
}
Run Code Online (Sandbox Code Playgroud)
要么:
A() { b.reset(new B()); }
Run Code Online (Sandbox Code Playgroud)
(为什么这很重要,请参阅boost::shared_ptr文档的"最佳实践"部分.)
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |