在CPtrList中,Find成员始终返回NULL

时间:2013-10-29 09:45:44

标签: visual-c++ vector stl mfc atl

我在CPtrList中添加了CString值。并使用查找功能。当我尝试使用CPtrList的Find方法查找CString值时,我总是得到NULL位置。

下面是我在CPtrList ptrFolderPath中添加CString值的代码:

CString sTemp;// 

ptrFolderPath.AddTail(new CString (sTemp));

在使用以下代码搜索时:

POSITION pos = ptrFolderPath.Find(sPath.GetBuffer(sPath.GetLength()));

这里sPath是一个CString。

但是pos值总是为NULL。

任何想法,我失踪的地方?

1 个答案:

答案 0 :(得分:2)

关键点是CPDNList :: Find()的MSDN帮助中的一行:“请注意,比较指针值,而不是对象的内容。”

当你的代码调用“new CString(sTemp)”时,会创建一个新的CString对象,并返回(并添加到CPtrList)的是指针值 - 新CString的内存中的位置。比方说,例如,这是在内存位置0x001234500。

调用Find()的代码传入字符缓冲区的地址,但是,即使它包含与上面CString相同的字符串字符,它在内存中的位置也会完全不同。由于您没有传入0x0012234500(在此示例中),因此找不到您期望的条目。

考虑到你想要做的事情,CPtrList可能不是合适的容器类型 - 像CStringList这样的东西会更合适,因为比较是通过值(即字符串的内容)而不是通过指针来完成的。 / p>

如果所有这些都没有意义,我担心你需要花一些时间阅读指针,以及诸如相等(两个具有相同值的不同对象)和身份(不同)之间的差异等概念引用同一个对象)