std::auto_ptr与裸指针
最近遇到一个问题,在只能用智能指针auto_ptr的情况下,而且裸指针会传出去,酱紫感到会有风险,野指针和内存泄露的问题,好吧,看代码:
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <iostream>
#include <memory>
using namespace std;
class Base1
{
virtual void Read()=0;
};
class Derived1
:public Base1
{
public:
Derived1():m_Data(0)
{
}
void Read()
{
std::cout << m_Data << std::cout;
}
private:
int m_Data;
};
class Base2
{
public:
virtual void Write()=0;
};
class Drived2:public Base2
{
public:
Drived2():m_pBase1(new Derived1())
{
}
Base1* GetBase1(){return m_pBase1.get();}
void Write(){}
private:
auto_ptr<Base1> m_pBase1;
};
int main()
{
Drived2* lpDerived2 = new Drived2();
Base1* lpBase1 = lpDerived2->GetBase1();
return 0;
}
引用:一定要以指针形式?一般我比较倾向使用引用,把返回值类型改成引用如何?
C/C++ code?1Base1&amp; GetBase1(){return *(m_pBase1.get());}
改成引用倒是挺好的,不过要注意初始指针的生命周期最大;
另外还有循环引用的问题,这个问题也比较棘手。