gpt4 book ai didi

python - 这个不安全的 C++ 代码在 Python 中安全吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:32:51 25 4
gpt4 key购买 nike

假设我做了类似的事情:

retVal = MyClass().MyClassFunc()

在 C++ 中等效的是创建一个临时的 MyClass 实例,一旦 MyClassFunc 函数返回,它就会被销毁。

现在,如果 MyClassFunc 函数返回对 MyClass 类的某个非静态成员变量的引用,那么这段代码通常是不安全的。

我的问题是这段代码在 Python 中是否安全。

更具体地说,我对以下方面的安全性感兴趣:

db = MongoClient(uri).get_database(db_name)

当然,我正在寻找一般答案。

最佳答案

简短回答:它是安全的(考虑到您担心垃圾回收)。

Now, if the MyClassFunc function returns a reference to some non-static member variable of the MyClass class, then this code is generally unsafe.

我假设您担心,因为您在堆栈上分配了 MyClass 对象,一旦您从该方法返回,它就会被删除。

但是在 Python 中概念上堆栈中不存在堆。您分配对象,Python 虚拟机应该这样处理它们——只要它们还活着——它们就不会被垃圾收集器收集。

因此,如果您返回对 MyClass 对象成员的引用,至少该成员仍然存在。如果该成员是非静态方法,它通常会引用该对象,因此 MyClass 对象也会存在。

在 Python 中,垃圾收集是以透明方式完成的,就像 C# 等一样。因此您不必担心内存管理:您可以假设如果您引用一个对象,它无论如何都会一直存在。

例如有时可以找到类似的东西:

getter = {'a': 1, 'b': 4, 'c': 2, 'd': 5}.get

所以在这里我们获得了对该字典的 get 方法的引用。我们不能再引用原始字典,但在内部,.get 方法将使字典保持事件状态。

关于python - 这个不安全的 C++ 代码在 Python 中安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45168116/

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