c++ - 什么时候可以直接访问内存中的对象成员?没有调用 getter

标签 c++

通常允许这样做(请不要对代码发表评论:-))

class SimpleClass {
    int member;
};

SimpleClass instance;
int* pointer = (int*) &instance;

但是,如果我将我的类定义为:

class SimpleClass {
    virtual void foo();
    int member;
};

我不能再这样了。好吧,我想我当然可以;它只是更复杂。

所以我想知道:它是在某处指定的,还是知道我何时可以这样做的唯一方法就是使用一些常识?不包括通常可以解决的对齐问题

最佳答案

通常,您希望尽可能地使类的内部结构与外界隔绝,但如果您确实需要直接访问成员,只需将其指定为公共(public)成员并直接获取指向它的指针即可。

class SimpleClass {
public:
  int member;
};

SimpleClass instance;
int* pointer = &instance.member;

我会避免以您描述的方式访问成员,因为正如您所指出的,类中的小改动可能会把它搞砸,这在您编写代码时可能没问题,但是当您稍后再回来使用它时,您可能会忽略这些微妙之处。此外,除非该类完全由 native 数据类型构造,否则我相信编译器的实现也会影响所需的偏移量。

关于c++ - 什么时候可以直接访问内存中的对象成员?没有调用 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5927586/

相关文章:

c++ - 如果我删除智能指针正在管理的指针会怎样?

c++ - 如何将函数模板作为(模板)参数传递给函数模板?

c++ - 使用 boost::property_tree 从 XML 中解析十六进制数和十进制数

java - 适用于C/C++/Java的DICOM和FFT库

c++ - 模板指针参数包

c++ - 为锦标赛系统分配奖品

C++\IronPython 集成示例代码?

c++ - QListView::doubleClicked 的插槽未被调用

python - 如何通过共享内存将 cv::Mat 发送到 python?

c++ - c++11 lambda 真的支持闭包吗?函数变量中存在语义冲突