为啥需要声明一个指针而不是一个对象?
Posted
技术标签:
【中文标题】为啥需要声明一个指针而不是一个对象?【英文标题】:Why do Ineed to declare a pointer and not an object?为什么需要声明一个指针而不是一个对象? 【发布时间】:2015-01-14 16:45:57 【问题描述】:我正在使用CMapStringToOb
来存储CMapStringToString
如果我将columns
声明为*columns
,我可以完成这项工作,但我想知道为什么我不能以这种方式工作
CMapStringToOb m_FfMasters;
CMapStringToString columns;
// if we haven't met this master before store the details for later use
if(!m_FfMasters.Lookup(_T("String"),(CObject*&)columns) )
getColumns(_T("String"),columns);
m_FfMasters.SetAt(_T("String"),(CObject*&)columns);
if(m_FfMasters.Lookup(m_workingFfMaster,(CObject*&)columns))
CString temp;
if(columns.Lookup(_T("String"),temp)) //<-- access violation here
return temp;
其他函数原型是:
void CClass::getColumns(CString code,
CMapStringToString& columns,
BOOL reverseKeyValue);
我在列查找时遇到访问冲突
【问题讨论】:
columns = new CMapStringToString();
这是什么?
new
返回一个指针。
对不起,这是一个令人困惑的问题,我该如何关闭它?
【参考方案1】:
因为你在这里分配了一个指向columns
的指针:
columns = new CMapStringToString();
【讨论】:
【参考方案2】:如果您问为什么您的编译器需要指针,请使用 Paul 的答案。如果您问为什么要使用指针应该(您并不完全理解指针),那么答案是:因为您正在编写一个函数,该函数使用一个尚不存在的对象作为CClass
类定义中的参数 CMapStringToString columns
直到运行时才会创建。所以为了让函数使用这个对象,你必须说使用“this”(参考)CMapStringToString
对象,我稍后会给你。然后使用 -> 运算符访问引用的对象成员。
【讨论】:
我在问:为什么它需要指针。我承认没有完全理解指针。我上次在 6 年前在基本的 ansi C 中使用它们,然后转移到 java 现在试图维护旧的 c++ 代码 这个块返回temp到什么函数?【参考方案3】:因为 CMapStringToOb 需要一个指向 CObject 的指针作为它的“数据”。
来自 MSDN:
CMapStringToOb 是一个字典集合类,将唯一的 CString 对象映射到 CObject pointers
【讨论】:
以上是关于为啥需要声明一个指针而不是一个对象?的主要内容,如果未能解决你的问题,请参考以下文章
c#里为啥有的使用时函数需要new一个对象而有的不用?为啥不直接调用就好?