c++ - 存储成员指针与成员值

标签 c++

在C++中,成员变量取值和指针有什么区别?比如下面代码中pThread和thread有什么区别:

class A {
public:
    boost::thread *pThread;
    boost::thread thread;
}

最佳答案

区别在于对象的内存布局。

成员项像结构一样存储 - 顺序且连续地存储在内存中(可能具有 2-4-8 字节对齐,但否则一个接一个地顺序存储)。指针作为 4/8 字节指针存储在内存地址中,而实际对象可以存储在内存中的任何位置。

考虑你有一个结构的情况

struct grades {
    unsigned char math;
    unsigned char english;
    unsigned char history;
    unsigned char physics;
    unsigned char chemistry;
    unsigned char biology;
    unsigned char computers;
};

结构的大小是 7 个字节。

现在如果你有一个类(class) Student_member:

class Student_member {
    unsigned long id;
    struct grades _grades;
};

和一个类 Student_pointer:

class Student_pointer {
    unsigned long id;
    struct grades *_grades;
};

那么 Student_member 类在内存中的大小将为 4+7=11 字节(long + 结构),它将被分配为一个连续的 block ,而 Student_pointer 类在内存中的大小将为 4+4=8字节(长+指针)和另外 7 个字节,分配在内存中其他地方存储实际成绩。

关于c++ - 存储成员指针与成员值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9049406/

相关文章:

c++ - 使用极坐标创建图像(图像变换)

c++ - std::async() 的包装器不起作用

c++ - 从 Eigen::Tensor 创建 tensorflow::Tensor

c++ - vector_base 继承与组合

c++ - 尾随返回类型中 decltype 的原因

c++ - C++ 中的 .dat ASCII 文件 I/O

C++:如何从封闭类继承

c++ - C(++) 结构力额外填充

c++ - fstream 和 wfstream 的基类

c++ - 数组拆分为头文件和源文件