【发布时间】:2013-05-15 04:33:33
【问题描述】:
我有以下构造函数:
MutexWrapper::MutexWrapper(Mutex * pMutex)
{
DebugPrint("0x%x", pMutex); // displays 0x1f83e54
}
它在以下函数中被调用:
void OnReviewBuffer_Callback( void * pUserData )
{
ReviewBuffer * thePointer = (ReviewBuffer *) pUserData;
DebugPrint("0x%x", thePointer); // this displays 0x1f83e48
MutexWrapper theMutexWrapper(thePointer);
}
很遗憾,我无法提供ReviewBuffer 的完整定义 - 但我希望以下内容就足够了:
class ReviewBuffer : public StreamConsumer_Base, public Mutex
{
...
};
问题是当我打印出thePointer 时,我得到0x1f83e48,但从构造函数内部打印的值是0x1f83e54。
为什么指针值不同 - 这与传递指针副本中的值传递有关吗?
【问题讨论】:
-
@John Dibling,我从问题中删除了 IN - 它的#define'd 扩展为空(这纯粹是为了读者的利益)。
-
克里斯是的,这正是它的用途。
-
@BeeBand 你确定在
theMutexWrapper声明之前的DebugPrint("0x%x", thePointer);给出了不同的值吗? -
请告诉我们调用前打印指针的代码,以及这个指针的确切定义。我怀疑这是一个继承/多态性问题。
-
@BeeBand:是的,这就够了,这确实是我的想法。我正在写一个答案。
标签: c++ pass-by-value