读书人

怎么用一个指针得到另外指针的内容且不

发布时间: 2012-02-07 17:45:36 作者: rapoo

如何用一个指针得到另外指针的内容且不能浅复制,没有重载等号。
有一个类A的函数返回类B的指针,用C类的指针使用一个函数来将这个返回指针接收,在delete的时候,删除类A,删除类C,出现错误,就是说,指针浅复制,出现了两次delete,这B、C类都没有重载=号,而且是库函数。A类是我写的,那么如何解决这个问题呢?

B *bp;
C *cp;
bp = cp-> returnBp();这样依然是浅复制,怎么才能让bp有自己的内存然后有和cp里面的返回指针有相同的数据?

另外,如果类内定义的其它类指针并且new了对象那么不在类里面删除,那么怎么删除它呢?比如 cp = new C;C* function(return cp); 在函数的外面C *cpout = B::function; 如何删除啊。这个地方不懂,有谁给讲解下,没时间给个资料,嫌分少,吱声。

[解决办法]
不返回一个指针,返回一个对象
要么规定有A删除.C不删除
[解决办法]
bp = new B(*cp-> returnBp());
[解决办法]
C类的指针使用一个函数来将这个返回指针接收
bp = cp-> returnBp();
到底是接受还是返回啊??
接收不是把bp做参数吗?

[解决办法]
这个问题是C++里的一个典型的指针生存周期管理的问题,解决办法有两
1:采用COM里采用的引用计数测量

class A
{
A()
{
m_nRef = 0;
}
long AddRef()
{
m_nRef ++;
};
long Release()
{
m_nRef--;
if( m_nRef <=0 )
{
delete this;
}
}
long m_nRef;//引用计数
};
然后再使用此对象的指针开始时调用AddRef,使用完后调用Release()就可以了。
为了方便使用,可以再做一只能指针包装类,具体请看VC自带的CComPtr模板类实现

2:自己强制约定谁分配,谁释放原则

读书人网 >C++

热点推荐