gpt4 book ai didi

c++ - 有没有办法将一个对象注入(inject)另一个对象的结构?

转载 作者:行者123 更新时间:2023-11-30 03:15:16 25 4
gpt4 key购买 nike

我正在尝试创建一个存在于结构中的对象,并将该结构传递给另一个指向相同地址的对象。这是我正在尝试做的一个最小示例:

#include <iostream>

class A {
};

struct S {
A* a;
S(A* c) { a = c; }
};

class B {
public:
B(S* s){ s_ = s; }
S* get_s() {return s_;}
private:
S* s_;
};

int main() {
A* a = new A();
S* s = new S(a);
B b = B(s);

std::cout << "a in A = " << &a << "\n";
std::cout << "a in S = " << &s->a << "\n";
std::cout << "a in B = " << b.get_s() << "\n";

//output:
// a in A = 0x7ffe81376918
// a in S = 0x2563e90
// a in B = 0x2563e90
}

我希望所有 a 都指向同一个地址。

最佳答案

让我们逐一检查您的输出...

std::cout << "a in A = " << &a << "\n";

&aA* 的地址您指向 A 的指针.如果你想要 A 的地址你指的是,你会做std::cout << a .

std::cout << "a in S = " << &s->a << "\n";

s->a给我们一个指向 A 的指针,或 A 的地址.获取该指针的地址是倒退了一步。就s->a到这里就够了。

std::cout << "a in B = " << b.get_s() << "\n";

b.get_s()将为您提供 S* 的地址成员。你可能想要 b.get_s()->a .

总的来说,你的输出应该是这样的:

  std::cout << "a in A = " << a << "\n";
std::cout << "a in S = " << &s->a << "\n";
std::cout << "a in B = " << b.get_s()->a << "\n";

这在 ideone 上为我提供了以下信息:

a in A = 0x5638893cac20
a in S = 0x5638893cac20
a in B = 0x5638893cac20

关于c++ - 有没有办法将一个对象注入(inject)另一个对象的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57191376/

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