在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/