最近在做物联网mqtt转发服务开发,感觉证书认证的mqtt太麻烦了...你们没提供密钥认证的mqtt.fx接入指南啊
A的析构函数将在其生命周期结束时运行。如果你想让它的内存被释放并且析构函数运行,那么如果它被分配到堆上,你必须删除它。如果它被分配到堆栈上,这会自动发生(即当它超出范围时,请参阅RAII)。如果它是一个类的成员(不是一个指针,而是一个完整的成员),那么当包含对象被销毁时会发生这种情况。
class A
{
char *someHeapMemory;
public:
A() : someHeapMemory(new char[1000]) {}
~A() { delete[] someHeapMemory; }
};
class B
{
A* APtr;
public:
B() : APtr(new A()) {}
~B() { delete APtr; }
};
class C
{
A Amember;
public:
C() : Amember() {}
~C() {} // A is freed / destructed automatically.
};
int main()
{
B* BPtr = new B();
delete BPtr; // Calls ~B() which calls ~A()
C *CPtr = new C();
delete CPtr;
B b;
C c;
} // b and c are freed/destructed automatically
在上面的例子中,每个删除和删除[]都是必需的。并且不需要删除(或确实可以使用),我不使用它。
auto_ptr
,unique_ptr
和shared_ptr
等..非常适合做这个生命周期管理要容易得多:
class A
{
shared_array<char> someHeapMemory;
public:
A() : someHeapMemory(new char[1000]) {}
~A() { } // someHeapMemory is delete[]d automatically
};
class B
{
shared_ptr<A> APtr;
public:
B() : APtr(new A()) {}
~B() { } // APtr is deleted automatically
};
int main()
{
shared_ptr<B> BPtr = new B();
} // BPtr is deleted automatically
当对New分配的指针调用DELETE时,将调用指向的对象的析构函数。
A * p = new A;
delete p; // A:~A() called for you on obkect pointed to by p
相似问题