我继承了一些包含以下段落的代码:
TStringList* pPortList(NULL);
pPortList = FindCommPorts();
ConnectionDialog->PortList = pPortList;
int nModalReturn = ConnectionDialog->ShowModal();
delete pPortList;
FindCommPorts()
是一个创建 a new TStringList()
、填充它并返回它的函数。
我很想用这个替换代码:
ConnectionDialog->PortList = FindCommPorts();
int nModalReturn = ConnectionDialog->ShowModal();
但后来我意识到我对 C++ 的所有权语义不够熟悉,无法确定这一点。会不会因为FindCommPorts()
is never delete
d的结果而导致内存泄漏?
编辑:再次查看代码,我认为原始版本不会导致悬挂指针——事实证明这ConnectionDialog->PortList
实际上是一个属性(我使用的是 Borland C++Builder 6)。该属性有一个自定义设置器,用于将字符串从 中复制出来,TStringList
之后不再使用传递的指针本身。对于之前没有提到这一点,我深表歉意——代码的编写方式确实看起来很糟糕。