2011-10-20 32 views
0

我想知道是什么模板,使用下面的两个指针之间的区别:内存分配的指针和一个复制指针在模板

让我们假设我分配的内存如下所示:

int* myPtr = new int[10]; 
int* anotherPtr = myPtr; 

现在,我通过“myPtr”和“anotherPtr”一些功能:

doSomthing(myPtr, status); 
doAnotherThing(anotherPtr, status); 

上述两个函数中,我使用这个参数来定义模板类,苏ch为:

tResource<int>* m_resourcePtr1; 
tResource<int>* m_resourcePtr2; 
m_resourcePtr1 = new tResource<int> (anotherPtr); 
m_resourcePtr2 = new tResource<int> (myPtr); 

resourcePtr1和resourcePtr2之间是否有区别?

+0

不存在。 –

+0

@Bassam你的问题背后似乎有某种原因。如果你会解释你为什么问这个问题,那么给出一个对你有意义的答案会更容易。 – selalerer

回答

2

也许吧。这取决于tResource对指针的作用。 tResource的构造函数可能会忽略指针参数并始终表现相同。因为你没有给什么tResource是或做任何细节,我们不能比说m_resourcePtr1 != m_resourcePtr2

+1

-1'anotherPtr == myPtr',所以没有区别。 –

+0

+1:迄今为止唯一严格正确的答案(尽管当OP澄清他的问题时,其他人可能会最终正确) –

+0

@Paul:你甚至读过这个答案吗?当你不知道'tResource'是什么时,你怎么知道'(anotherPtr == myPtr)=>(m_resourcePtr1 == m_resourcePtr2)'? –

0

是否有resourcePtr1和resourcePtr2之间有什么不同任何更具体。只有当你构建在构造对象时使用一些static状态

这两个对象不会是等价的,并更新其每次被创建的对象,或者你使用一些全局状态,或其他任何方式状态,这并不取决于构造函数的参数,如rand()或用户输入。

否则,两个对象都是等价的,因为两者都是从完全相同的信息myPtr构建的。

另外,anotherPtr指向与myPtr相同的对象,因此它们是相同的。如果你delete myPtranotherPtr将会失效。

因此,下面

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_resourcePtr1m_resourcePtr2之间有什么区别?答案非常简单。

+0

除非你知道'tResource'是什么,否则你不能保证。 –

+0

答案仍然是“谁知道”? 'tResource'里面有一个自动递增计数器会怎么样?这两个对象是立即不同的,这只是一个微不足道的例子! –

+0

@ TomalakGeret'kal:我添加了几个文本。 – Nawaz

0

没有区别;构造函数无法区分两个int指针—实际上,它们之间没有区别,因为它们都指向相同的数组。一个指针是您在第一次创建数组时使用的指针并不会与其他指针有任何区别。

但是,请注意,您的代码是错误的:如果您要执行的操作是将指针传递给数组,则还应该传递数组的大小(本例中为10)。你还会知道该数组包含多少个整数?

+0

该类可能有其他状态,_not_不直接从ctor参数中获取,这使得两个对象不同。你只是不太了解班级做出这些保证。 –

+0

@Tomalak它很清楚OP是询问指针之间是否有区别;假设'tResource'中没有任何兴趣是合理的。 –

+1

你知道什么是假设,不是吗? –