标签: circular-reference

如何实现彼此引用的类?

我是C++编程的新手,所以也许你会发现我的问题太愚蠢了.对此感到抱歉,但我想知道如何实现这种Java风格的结构:

#include "B";
class A {
   B objB;
}
---
#include "A";
class B {
   A objA;
}
Run Code Online (Sandbox Code Playgroud)

编译器疯狂试图理解这段代码.你能告诉我一个可能的解决方案吗?谢谢!

c++ circular-reference

1
推荐指数
1
解决办法
165
查看次数

C++循环引用,使用方法时出错,甚至在前向声明之后

假设我有:

class B;
class A{
    private:
        B *b;
    public:
        bar(){ b->foo()};
        foo();
}

class B{
    private:
        A *a;
    public:
        bar(){ a->foo();}
        foo();
}
Run Code Online (Sandbox Code Playgroud)

编译时,这个文件给出了一个

错误"无效使用不完整类型struct B",

即使我已经向前声明了B类.据我所知,这是因为当我调用函数foo()b,编译器仍然不知道存在这样的函数.我怎么解决这个问题?

c++ compiler-errors forward-declaration circular-reference

1
推荐指数
1
解决办法
254
查看次数

C++ 中的循环迭代

我正在寻找一种简单的方法来迭代 C++ 中的一组整数。例如,如果我有一个整数变量“x”,并且想要在 4 个整数值上连续使用增量语句“x++”,则所需的输出将类似于“0 1 2 3 0 1 2...”。

我知道循环链表是一个解决方案,但对我来说这似乎有点矫枉过正,我真的需要一些简短而甜蜜的东西。我怀疑枚举类型可能能够做这样的事情,但我的研究还没有发现任何结果。

c++ iteration circular-reference

1
推荐指数
1
解决办法
2035
查看次数

C++智能指针循环链接

我有两种类型:A和B.'聪明'指向B和B'聪明'指向A.在主要范围内,我有一个指向A的智能指针.

class A;
class B;
typedef shared_ptr<A> pA;
typedef shared_ptr<B> pB;

class B {
public:
    B() {}
    pA a;
    virtual ~B() {cout << "delete b" << endl;}
};

class A {
public:
    A() : b(new B()) {}
    pB b;
    virtual ~A() {cout << "delete a" << endl;}
};

int main(int argc, char **argv)
{
    {
        pA pa(new A());
        pa->b->a = pa;
    }
    cout << "here" << endl;

}
Run Code Online (Sandbox Code Playgroud)

我希望在范围的末尾删除这两个对象.没有任何对象被删除,因为A有两个指向自身的指针(一个在b中,一个在主勺中).在此输入图像描述

这是一个简单的例子.实际上我有两种以上的类型和更多的指针.可以想象一个大的对象结构指向彼此浮动在RAM中,只有一个指针从主范围指向这个结构.我希望在释放此指针后删除此结构.

c++ smart-pointers shared-ptr circular-reference

1
推荐指数
2
解决办法
395
查看次数

为什么这个Python代码不能在__hash__中导致无限循环?

我是一个python newb,我只是想了解这里的逻辑:

class SomeClass:

    #...
    def __hash__(self):
        return self.__str__().__hash__()

    def __str__(self):        
        arr = []
        if self.final: 
            arr.append("1")
        else:
            arr.append("0")

        for (label, node) in self.edges.iteritems():
            arr.append( label )
            arr.append( str( node.id ) )

        return "_".join(arr)

    #...

someObj = SomeClass()  
hash(someObj)  
Run Code Online (Sandbox Code Playgroud)

我正在读它的方式是这样的:

如果我尝试hash()在类SomeClass的对象上调用函数 - >那么__hash__将执行魔术方法.__hash__方法调用__str__方法然后在__hash__方法的结果__str__上第二次调用方法- >其中imho导致循环引用和无限循环...

有人可以向我解释 - 这不是__hash__一次又一次被召唤的无限循环吗?

python circular-reference

1
推荐指数
1
解决办法
120
查看次数

Delphi:声明变量避免循环引用

我有一个Delphi单元需要保留各种形式的应用程序的指针,以便稍后对它们进行操作.

为了执行这些操作,我需要将指针强制转换为表单类型,例如.

var    
  ptrFrmMain: Pointer;
  CurrentFrmMain: TfrmMain;
begin
    CurrentFrmMain := ptrFrmMain;
    CurrentFrmMain.Close();
end;
Run Code Online (Sandbox Code Playgroud)

问题是该单元包含在应用程序的所有其他Delphi单元的使用中.因此,虽然我可以Pointer在接口部分声明一个简单类型,但我不能声明在其他单元(例如TfrmMain单元frmMain.pas)中声明的类型.

我可以通过在实现部分中使用来解决这个问题,例如:

interface
type TMyThread = class(TThread)
  Public
    ptrFrmMain:Pointer
...

implementation
    uses frmMain

    var
      CurrentFrmMain: TfrmMain;
Run Code Online (Sandbox Code Playgroud)

但是仍然存在一个问题:我需要将变量特定于我的类实例,用于多线程目的,而不是通用的全局变量.但我不能把它放在我的TmyThread班级里面,因为TfrmMain没有在那里声明,我不能把它放在接口部分的使用中.

一个解决方案是CurrentFrmMain在所有使用它的过程中作为局部变量放置,然后CurrentFrmMain := ptrFrmMain每次都进行转换,但是你知道更好的解决方案吗?

非常感谢你提前.

delphi circular-reference

1
推荐指数
1
解决办法
282
查看次数

javascript循环引用 - 打破循环

例如,我有这个代码:

var objectA = {};
var objectB = {};

objectA.pointer = objectB;
objectB.pointer = objectA;

objectA = null;
objectB = null;
Run Code Online (Sandbox Code Playgroud)

我假设在最后两个语句之后,没有引用最初分配给objectA和objectB变量的对象.但根据技术文献,这些对象的参考仍然存在.为什么?objectA.pointer引用或objectB.pointer引用是否仍然存在,即使objectA和objectB设置为null?

javascript circular-reference

1
推荐指数
1
解决办法
88
查看次数

杰克逊双向关系(一对多)不起作用

我在这个Web服务项目中使用Spring(xml + annotations),Hibernate(注释).数据库关系图,模型,预期和实际输出如下,

数据库表关系

Customer.java

@Entity
@Table(name="customer")
public class Customer implements Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="customer_id", unique=true, nullable =false)
    long customerId;
    @Column(name="name")
    String name;
    @Column(name="secondary_name")
    String secondaryName;
    @Column(name="date")
    Date date;
    @Column(name="address")
    String address;
    @Column(name="post")
    String post;
    @Column(name="pin")
    String pin;
    @Column(name="phone")
    String phone;
    @OneToMany(fetch=FetchType.LAZY, mappedBy="customer", cascade=CascadeType.ALL)
    @JsonManagedReference
    Set<Loan> loans = new HashSet<Loan>();
    //constructors, getters and setters
}
Run Code Online (Sandbox Code Playgroud)

Loan.java

public class Loan implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY) …
Run Code Online (Sandbox Code Playgroud)

hibernate spring-mvc one-to-many circular-reference jackson

1
推荐指数
1
解决办法
8233
查看次数

Typescript / Javascript垃圾收集器会处理循环引用还是会泄漏内存?

在这样的语言中C#这不是问题,但是这会导致很难找到其他语言的内存错误。我可以在中使用以下代码,Typescript还是可以Javascript相信一切都会好起来吗?

class Dad {
    kids: Kid[];
}
class Kid {
    dad: Dad;
    siblings: Kid[];
}

let anakin: Dad | undefined;

function makeKids(dad: Dad) {
    const luke = new Kid();
    const leia = new Kid();
    luke.dad = dad;
    leia.dad = dad;
    luke.siblings = [leia];
    leia.siblings = [luke];
    dad.kids = [luke, leia];
}

anakin = new Dad();
makeKids(anakin);
console.log(anakin.kids.length); // Prints out 2
anakin = undefined;
// I expect luke and leia to die at this …
Run Code Online (Sandbox Code Playgroud)

javascript siblings circular-reference node.js typescript

1
推荐指数
1
解决办法
177
查看次数

如何解决C中的循环结构依赖

所以我有两个结构体,为了简单起见,我们将它们称为ABA包含一个指向 的指针B,并B包含一个A。所以这里是代码:

#ifndef A_H
#define A_H

#include "b.h"

typedef struct _A {
    B *b;
} A;

#endif
Run Code Online (Sandbox Code Playgroud)

#ifndef B_H
#define B_H

#include "a.h"

typedef struct _B {
    A a;
} B;

#endif
Run Code Online (Sandbox Code Playgroud)

现在的问题是,当我从我的主 c 文件中导入 ah 时,我收到关于 A 是如何从 bh 未知类型的错误我不知道如何解决这个问题。

c struct circular-dependency include circular-reference

1
推荐指数
1
解决办法
644
查看次数