问题标签 [object-lifetime]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
5767 浏览

delphi - 执行嵌套 TRY / FINALLY 语句的最佳实践

嗨,在 delphi 中做嵌套 try 和 finally 语句的最佳方法是什么?

你能提出一个更好的方法吗?

0 投票
9 回答
2043 浏览

c++ - 关于智能指针及其不可避免的不确定性的问题

在过去的两年里,我一直在我的项目中广泛使用智能指针(确切地说是 boost::shared_ptr)。我理解并欣赏他们的好处,而且我通常非常喜欢他们。但是我使用它们的次数越多,我就越想念 C++ 在内存管理和 RAII 方面的确定性行为,而我在编程语言中似乎喜欢这种行为。智能指针简化了内存管理过程并提供了自动垃圾收集等功能,但问题在于,通常使用自动垃圾收集,而智能指针具体会在(去)初始化的顺序上引入某种程度的不确定性。这种不确定性剥夺了程序员的控制权,正如我最近意识到的那样,设计和开发 API 的工作,

为了详细说明,我目前正在开发一个 API。此 API 的某些部分要求某些对象在其他对象之前初始化或在其他对象之后销毁。换句话说,(去)初始化的顺序有时很重要。举一个简单的例子,假设我们有一个名为 System 的类。系统提供了一些基本功能(在我们的示例中为日志记录),并通过智能指针保存了许多子系统。

正如您已经知道的那样,子系统仅在系统的上下文中才有意义。但是这种设计中的子系统很容易比其父系统寿命更长。

如果我们使用原始指针来保存子系统,那么当我们的系统出现故障时,我们就会破坏子系统,当然,pSomeSubsystem 将是一个悬空指针。

虽然保护客户端程序员免受自己的伤害不是 API 设计人员的工作,但让 API 易于正确使用和难以错误使用是一个好主意。所以我问你们。你怎么看?我应该如何缓解这个问题?你会如何设计这样一个系统?

在此先感谢,乔希

0 投票
1 回答
1174 浏览

asp.net-mvc - MVC 对象实例还是静态类?

我对何时创建对象实例或静态助手类感到困惑。例如,如果我调用一个方法来更新数据模型并提交到数据库,我会创建 DataContext 的一个实例。该 Datacontext 的生命周期是多少,每次需要更新新数据时都可以创建新实例吗?

在我的控制器中,我创建了一个 DataCONtext 实例,并在回发到控制器时重用该实例。

0 投票
4 回答
2094 浏览

c# - .NET - 终结器和退出 (0)

我有一个 .NET C# / C++ 应用程序,它在线程中使用对exit(0)(from <stdlib.h>) 的调用来终止。

奇怪的是,在某些情况下,托管对象的终结器在调用之后立即被调用exit,而在其他情况下,它们根本不会被调用。

情况非常确定 - 应用程序在其生命周期内从外部插件 dll(用非托管 C 编写)调用一些方法。
如果我使用 dll A,则始终调用终结器。
如果我使用 dll B,则永远不会调用终结器。

在 exit(0) 调用的情况下,终结器的预期行为是什么?(如果有任何预期的 - 和记录的 - 行为)

对外部 dll 的调用能否更改一些可能影响进程终止方式的全局设置?

0 投票
2 回答
4754 浏览

c++ - C++ 迭代器的生命周期和有效性是多少?

我计划在 C++ 中实现一个事物列表,其中元素可能会被乱序删除。我不希望我需要任何类型的随机访问(我只需要定期扫描列表),并且项目的顺序也不重要。

所以我想std::list<Thing*> with this->position = insert(lst.end(), thing)应该做的伎俩。我希望 Thing 类记住每个实例的位置,以便我以后可以lst.erase(this->position)在恒定时间内轻松完成。

但是,我对 C++ STL 容器还是有点陌生​​,我不知道将迭代器保留这么长时间是否安全。特别是考虑到在插入的事物之前和之后会删除其他元素,然后它就消失了。

0 投票
4 回答
983 浏览

dependency-injection - 还有哪些其他 IoC 容器具有类似 IInitializable 的功能?

我在之前的项目中一直在使用 Castle Windsor,我非常喜欢它。对于我当前的项目,我希望使用不同的 IoC 容器。Castle Windsor 自 2007 年以来没有发布任何新版本,并且仍然没有 1.0 版,因此很难证明在商业环境中使用它是合理的。

我喜欢 Castle Windsor 的一件事是,在设置了所有依赖项之后,您可以让容器在您的服务上调用 Initialize 方法,只需让服务实现即可IInitializable。我经常使用这个。它使进行属性注入而不是构造函数注入变得容易,并且可以清理代码和进行相当多的测试。

我一直在寻找 StructureMap、AutoFac、Unity 和 Spring.Net 作为替代方案,但其中只有 Spring.Net 支持类似的东西,它会自动调用一个Init()方法。不幸的是,Spring.Net 并不真正支持我想要使用 IoC 容器的方式(它基于字符串键而不是接口声明注入,因此它的自动装配支持也受到限制)

我是否错过了我查看的 IoC 容器中的类似功能?我使用 IoC 容器的方式是否有问题?或者是否有其他 IoC 容器支持 IIinitializable 或 Init() 之类的东西?

0 投票
3 回答
211 浏览

memory - 何时从堆中释放可变状态值?

封装可变状态部分的 F# WikiBook 上,有以下代码片段。

起初,似乎很容易接受这样一个事实,即每次调用可变counter值都会递增。incr

但是想了一会儿,我无法理解的是什么时候counter从堆中释放出来,以及counter在递增之前如何仍然引用先前的值。它是如何通过多个函数调用counter在函数范围内生存的?incr

所以主要问题是:

  • 什么时候counter从堆中释放出来?
  • 不是counter内存泄漏吗?
0 投票
3 回答
945 浏览

oop - 使用像 IStartable 这样的概念有什么好处?

而不是使用这样的接口:

我通常只是让对象的构造函数运行 Start() 代码,并实现 IDisposable 以便 dispose 方法运行 Stop() 代码。

只是风格问题吗?还是因为没有像 IStartable 这样的东西而错过了一些重要的东西?我所看到的只是额外的复杂性,因为您必须保持它的启动/停止状态。

使用 start/stop 与使用 ctor/dispose 的优缺点是什么,尤其是在 IoC/DI 容器的上下文中?

编辑:很好的答案,你已经说服我使用可启动对象的界面。我无法决定谁的答案最好,所以我会在 24 小时后接受投票最多的人。

0 投票
1 回答
505 浏览

objective-c - 检测 NSView 何时被释放

有什么方法可以检测 NSView 何时会被释放?

原因是,我有一些简单的委托(例如处理 -control:textView:doCommandBySelector: 以允许输入返回/制表键的 NSTextField 委托)。我想把这个委托对象放在笔尖上,连接 NSTextField 的委托连接并让它工作。

它确实有效,但即使在它链接到的 NSTextField 被释放后,委托也不会被释放,因此委托对象泄漏。

我希望委托对象能够检测到 NSTextField 何时被解除分配,但我想不出任何方法来做到这一点,这使我不得不从其他控制器存储到委托对象的单独链接并在某个非常不理想的时候手动释放它。有任何想法吗?

0 投票
1 回答
1275 浏览

powershell - 在进程终止之前未能关闭/处置 Powershell Runspace 对象有什么影响?

给定一个应用程序在应用程序的生命周期内维护一个运行空间对象的单例实例(来自 System.Management.Automation.Runspaces),在应用程序终止之前未能处置运行空间的潜在副作用是什么?

我提出的设计原理是内存/句柄泄漏在这种情况下不是问题,因为进程终止无论如何都会强制释放所有这些资源,并且单例与应用程序具有相同的生命周期。该设计是否忽略了其他考虑因素?