因此,我已经听到过有关现代C++风格的一个经验法则,那就是不应该使用new或delete,而应该使用智能指针。所以当我有一个类,其中一个成员是指向另一个对象的指针时,如何去解决这个问题。通过使用智能指针,我可以避免需要删除,但我仍然需要使用新建对象。例如。是下面的“典型”现代C++风格,还是应该怎么做呢?在“现代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;
}
我知道Boost有这个,我假设C++ 0x有类似的东西,但是你可以使用'boost :: make_shared (9)'而不是'boost :: shared_ptr (new int(9))' –
Dawson
不要听那些试图告诉你这个或那个没有更多的“现代风格”的人。建议可能是好的或坏的,但是你需要在你正在编写的特定代码中为你自己(和你的继任者)提供有用的帮助。否则,你只是参加一次货物崇拜。 –
我认为你很难建议设计C++程序与RAII相关,因此不需要或很少需要实现显式析构函数(这也意味着几乎不需要使用delete来显式释放对象)。 – mloskot