gpt4 book ai didi

C++ : pointers change?

转载 作者:行者123 更新时间:2023-11-28 03:34:54 25 4
gpt4 key购买 nike

就在我以为自己掌握好指针的时候,我又糊涂了。您的见解可能会有所帮助。

我想我可以用非常笼统的术语来说明让我感到困惑的地方,例如:

a) 如果我写 A* p = new A(); (其中 A 是某个类),然后执行类似 (*p).do_stuff() 的操作,然后是 p 指向的对象可能会在内存中移动,那么为什么 p 仍然指向我的对象?

b) 类和类的成员变量是如何存储在内存中的。

但也许我更具体地告诉你我遇到的问题更有用。假设我有一个类 Car,它有一个成员变量 Engine engine_;(其中 Engine 是其他类)。美好的。现在假设由于某种原因我想创建一个类,它有一个成员变量,该成员变量是指向 Engine 的指针,例如:

class Car
{
friend Repair;
public:
Car() {engine_ = Engine();}
private:
Engine engine_;
};

class Repair
{
public:
Repair(const Car &car) : engine_(&(car.engine_)) {}
private:
Engine *engine_;
};

repair.engine_ 不可能总是指向我汽车的引擎,是吗(?)但即使在第二个版本中也是如此:

class Car
{
friend Repair;
public:
Car() {engine_ = new Engine();}
~Car() {delete engine_;}
private:
Engine *engine_;
};
// Maybe I need/should write consts somewhere, not sure

class Repair
{
public:
Repair(const Car &car) : engine_(car.engine_) {}
private:
Engine *engine_;
};

虽然这似乎更有可能奏效,但我不知道如何/理解它是否会......

预先感谢您的回答!

最佳答案

If I write A* p = new A(); (where A is some class), and then do stuff like (*p).do_stuff(), then the object pointed to by p might move in memory

不,不会。 (至少,*p 会保留原样;如果它本身有指针成员,那么这些成员可能会被重置为指向其他地方。)

How are classes and member variable of classes stored in memory

作为位。

class Foo {
int i;
char *p;

public:
void bla();
};

将表示为 int 的位(可能是 32),然后是指针的位(32 或 64),中间可能有一些填充。该方法不会占用您实例中的空间,它是单独存储的。

至于你的例子,我不是很理解问题所在。如果 Car 保持事件状态并且不重置其 Engine*,只要 Repair 对象存在,它就应该可以工作。 (不过,它看起来并不特别健壮。)

关于C++ : pointers change?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11232298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com