不同的对象指针值和它的this指针
Different object pointer value and its this pointer
基本上,我写了一个类里面有另一个类数组属性,我的意思是:
class MyClass
{
unsigned long long x_;
bool y_;
public:
MyClass & operator=(const MyClass & mc)
{
x_ = mc.x_;
y_ = mc.y_;
return *this;
}
};
class MyOtherClass
{
MyClass myClass_[9];
public:
MyOtherClass & operator=(const MyOtherClass & mc)
{
for (unsigned int i = 0; i < 9; i++)
{
myClass_[i] = mc.myClass_[i];
}
return *this;
}
};
所有这些都在共享库中实现。
我在第二个库中使用第二个类,如:
void ThridClass::foo( )
{
MyOtherClass c1;
MyOtherClass c2;
c1 = c2;
}
在64位编译模式下使用xlC_7,没有对齐pragmas,没有优化,没有virtual
函数等,在Aix系统上运行。
以下是我在两个库中使用的编译器选项:
-q64 -bernotok -g -M -qflag=i:w
,这些是链接器选项:
-brtl -bernotok -G
当我使用dbx调试程序并请求c1.myClass_[0]
地址时,我得到了一个值。但是,如果我在MyOtherClass.operator=()
函数内部执行,我得到了这个属性指针的另一个地址。
(dbx) p &c1.myClass_[0]
0x0ffffffffffe6a20
(dbx) s
stopped in operator=(const MyOtherClass &)
(dbx) p &myClass_[0]
0x0ffffffffffe69c0
这个问题在Linux上不会出现,并且工作得很好。
任何想法?
只需放弃您的复制赋值和复制构造函数定义-隐式编译器生成的定义将绰绰绰用。
在你的操作符=你返回循环内
MyOtherClass & MyOtherClass::operator=(const MyOtherClass & mc)
{
for (unsigned int i = 0; i < 9; i++)
{
myClass_[i] = mc.myClass_[i];
return *this; //// Move this outside the loop.
}
}
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 关于C++中具有多重继承"this"指针的说明
- Doees the 'this' 指针参与虚函数的多态行为
- 指针'this+1' C++中指的是什么?
- 为什么使用指向函数的指针调用虚函数时不需要指针"this"?
- Lambda 函数捕获错误的指针"this"
- 调用类的方法时,类的指针"this"变为 null C++
- 指针'this'可以是共享指针吗?
- 如何在C++中为指针'this'赋值
- C++:指针"this"没用吗?
- 指针"this"有什么问题?
- 将指针'this'传递为 LPARAM
- 错误 C2663:指针'this'重载没有合法转换
- C++ : 了解指针"this"
- 更改对象的指针'this'以指向不同的对象
- C++编译器是为所有成员方法生成指针"this"还是仅为引用成员的方法生成指针?
- 使用指针和不使用指针"this"有区别吗?
- 将enable_shared_from_这个基于类的指针(this)存储在itelf中
- 创建指向对象的指针"this"
- 如何在类中取消初始化指针"this"?