在我的库中,我有一个数组类:
template < class Type >
class Array
{
Type* array_cData;
...
Type& operator[] (llint Index)
{
if (Index >= 0 && Index < array_iCount && Exist())
return array_cData[Index];
}
};
这很好,但是如果我在堆栈中生成类,那么:
Array<NString>* space = new Array<NString>(strList->toArray());
checkup("NString split", (*space)[0] == "Hello" && (*space)[1] == "world");
//I must get the object pointed by space and after use the operator[]
所以我的问题是:我可以在array_cData中获取对象而不指定像这样指向的对象:
Array<NString>* space = new Array<NString>(strList->toArray());
checkup("NString split", space[0] == "Hello" && space[1] == "world");
提前致谢! :3
-Nobel3D
答案 0 :(得分:0)
最简单的方法是将指针转换为引用
Array<NString>* spaceptr = new Array<NString>(strList->toArray());
Array<NString> &space=*spaceptr;
checkup("NString split", space[0] == "Hello" && space[1] == "world");
P.S。如果operator[]
收到无效的索引值,您将获得一定数量的未定义行为,以及第二次帮助崩溃。
答案 1 :(得分:0)
惯用的方法是没有指针:
Array<NString> space{strList->toArray()};
checkup("NString split", space[0] == "Hello" && space[1] == "world");
使用指针,你必须以某种方式解除引用
Array<NString> spacePtr = // ...
spacePtr->operator[](0); // classical for non operator method
(*spacePtr)[0]; // classical for operator method
spacePtr[0][0]; // abuse of the fact that a[0] is *(a + 0)
auto& spaceRef = *spacePtr;
spaceRef[0];