- A+
所属分类:C++
函数调用方式
- void fun(int* &p)
- {
- delete p;
- p = NULL;
- }
- //调用
- int* temp = new int(10);
- fun(temp);
问题的根源是如何传递指针,我们可以使用指针引用,将指针以引用的方式传递过去,这样,一旦在函数内析构指针后,外部的指针值将会同步更新。例子中,调用fun函数后,temp指针也会变成NULL
类成员变量存储
A.h文件
- #ifndef A_H
- #define A_H
- class A
- {
- public:
- A();
- };
- #endif // A_H
A.cpp文件
- #include "a.h"
- A::A()
- {
- }
B.h文件
- #ifndef B_H
- #define B_H
- class A;
- class B
- {
- public:
- B(A* &a);
- private:
- A* & m_a;//存储指针的引用
- };
- #endif // B_H
B.cpp文件
- #include "b.h"
- #include "a.h"
- B::B(A* &a) //传递指针的引用
- :m_a(a)
- {
- }
调用过程
- A* tempA = new A();
- B* tempB = new B(tempA);
- delete tempA;
- tempA = NULL;
调用结束后,tempB中的m_a也更新为NULL。
二级指针
B.h文件
- #ifndef B_H
- #define B_H
- #include <QMap>
- class A;
- class B
- {
- public:
- B();
- void append(A** child);
- A* getChild(QString id);
- private:
- QMap<QString, A**> m_children;
- };
- #endif // B_H
B.cpp文件
- #include "b.h"
- #include "a.h"
- #include <QDebug>
- B::B()
- {
- }
- void B::append(A ** child)
- {
- m_children.insert("id",child);
- }
- A *B::getChild(QString id)
- {
- return *(m_children.value(id));
- }
调用过程
- A* tempA = new A();
- B* tempB = new B();
- tempB->append(&tempA);//二级指针
- delete tempA;
- tempA = NULL;
- A* result = tempB->getChild("id");
这时候,取出的result也会是NULL。