我想知道在模板中使用以下两个指针有什么区别:
让我们假设我分配了一个内存如下:
int* myPtr = new int[10];
int* anotherPtr = myPtr;
现在,我将“myPtr”和“anotherPtr”传递给某些函数:
doSomthing(myPtr, status);
doAnotherThing(anotherPtr, status);
在上面两个函数中我使用此参数来定义模板类,例如:
tResource<int>* m_resourcePtr1;
tResource<int>* m_resourcePtr2;
m_resourcePtr1 = new tResource<int> (anotherPtr);
m_resourcePtr2 = new tResource<int> (myPtr);
resourcePtr1和resourcePtr2之间有什么区别吗?
答案 0 :(得分:2)
也许。这取决于tResource对指针的作用。可能是tResource的构造函数只是忽略指针参数并且总是表现相同。既然你没有详细说明tResource是什么或做了什么,我们就不能再说m_resourcePtr1 != m_resourcePtr2
答案 1 :(得分:0)
resourcePtr1和resourcePtr2之间是否有任何不同。
只有在构造函数中构造对象时使用某些static
状态,并且每次创建对象时更新它,或者使用某些全局状态或任何其他方法时,这两个对象将不等效状态,不依赖于构造函数的参数,例如rand()
或用户输入。
否则,两个对象都是等价的,因为两者都是从名为myPtr
的完全相同的信息构建的。
此外,anotherPtr
指向与myPtr
相同的对象,因此它们是相同的。如果您delete myPtr
,anotherPtr
将无效。
所以,以下
m_resourcePtr1 = new tResource<int> (anotherPtr);
m_resourcePtr2 = new tResource<int> (myPtr);
等同于此,
m_resourcePtr1 = new tResource<int> (myPtr);
m_resourcePtr2 = new tResource<int> (myPtr);
现在问问自己,m_resourcePtr1
和m_resourcePtr2
之间有什么区别吗?答案非常简单。
答案 2 :(得分:0)
没有区别;构造函数无法区分两个int-pointers - 事实上,它们之间没有区别,因为它们都指向同一个数组。一个指针是您在第一次创建数组时使用的指针,这一事实并没有使它与其他指针有任何不同。
但是,请注意您的代码是错误的:如果您要做的是将指针传递给数组,您还应该传递数组的大小(在这种情况下为10
) 。你怎么知道数组包含多少个int?