Class 中静态成员的地址
Address of static member in a Class
如何在 C++ 中获取 class 的私有静态成员的内存地址。
在下面的代码中,我直接通过内存地址访问 class 的私有成员。
#include <iostream>
class directM {
int a;
int b;
public:
directM(int aa , int bb){
a = aa;
b = bb;
}
void show(){
std::cout << a << b << std::endl;
}
};
int main(){
directM dm(10,20);
dm.show();
*(int*)( &dm ) = 15;
*(int*)( ( (int*)(&dm) ) + 1 ) = 25;
dm.show();
return 0;
}
现在,如果我更改其中一个成员并将其设为静态,即
static int b;
现在我怎样才能通过地址直接访问这个私有成员。
注意:- 我知道这是一种非常不明智的访问数据的方式,我不会用它来解决任何问题。这只是一个学习练习,可以更好地了解这门语言。
静态成员变量不是对象的一部分,它们的存储是完全独立的。如果不访问变量名称,无法知道它们的位置。
理想情况下,您不应该这样做,并且该语言旨在使其变得困难,因为它被标记为 private
。
如果您将其更改为 public 静态成员(以便您可以通过名称访问它),那么您可以这样使用 address-of
运算符:
class directM { public: static int b; }
int* staticMember = &directM::b;
C++ 不保证内存中的布局或静态成员的组织,因此此代码不安全:
class directM {
public:
static int first;
static int second;
}
int* firstAddr = &directM::first;
int* secondAddr = firstAddr++;
assert( secondAddr == &directM::second );
如何在 C++ 中获取 class 的私有静态成员的内存地址。 在下面的代码中,我直接通过内存地址访问 class 的私有成员。
#include <iostream>
class directM {
int a;
int b;
public:
directM(int aa , int bb){
a = aa;
b = bb;
}
void show(){
std::cout << a << b << std::endl;
}
};
int main(){
directM dm(10,20);
dm.show();
*(int*)( &dm ) = 15;
*(int*)( ( (int*)(&dm) ) + 1 ) = 25;
dm.show();
return 0;
}
现在,如果我更改其中一个成员并将其设为静态,即
static int b;
现在我怎样才能通过地址直接访问这个私有成员。
注意:- 我知道这是一种非常不明智的访问数据的方式,我不会用它来解决任何问题。这只是一个学习练习,可以更好地了解这门语言。
静态成员变量不是对象的一部分,它们的存储是完全独立的。如果不访问变量名称,无法知道它们的位置。
理想情况下,您不应该这样做,并且该语言旨在使其变得困难,因为它被标记为 private
。
如果您将其更改为 public 静态成员(以便您可以通过名称访问它),那么您可以这样使用 address-of
运算符:
class directM { public: static int b; }
int* staticMember = &directM::b;
C++ 不保证内存中的布局或静态成员的组织,因此此代码不安全:
class directM {
public:
static int first;
static int second;
}
int* firstAddr = &directM::first;
int* secondAddr = firstAddr++;
assert( secondAddr == &directM::second );