问题标签 [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 投票
1 回答
2325 浏览

.net - 使用 Structuremap 更改范围的多个构造函数?

为了说明问题,这是我的设置的简化版本。我有一个像这样的工厂:

测试这个的程序是一个consoleApp。足以证明我的观点。

我在我的 Init 静态方法中设置了 strucutreMap。

如果我只有一个构造函数并像这样设置 StructureMap :

效果很好,输出显示无
参数无
参数无
参数

每个调用都会构建一个新实例。

现在,如果我取消注释第二个构造函数,但我想使用无参数的构造函数,并且具有相同的默认生活方式。我该怎么办?

我试过了:

它只是不起作用:InstanceKey 缺少请求的实例属性“i”

如果我喜欢这样:

It works, but the output is just one "parameterless" meaning it's not building a new instance for each call. It's using this specific instance I pass in.

The only way I found is to add the [DefaultConstructor] on top of my parameterless constructor and use the standard x.For().Use(); But I don't want to add this attribute and spread the configuration accross my model.

Help?

0 投票
10 回答
30732 浏览

c# - AppDomain 和 MarshalByRefObject 生命周期:如何避免 RemotingException?

当 MarshalByRef 对象从 AppDomain (1) 传递到另一个 (2) 时,如果在第二个 AppDomain (2) 中对其调用方法之前等待 6 分钟,您将收到 RemotingException :

System.Runtime.Remoting.RemotingException:对象 [...] 已断开连接或在服务器上不存在。

关于这个问题的一些文档:

如果我错了,请纠正我:如果 InitializeLifetimeService 返回 null,那么当 AppDomain 2 卸载时,即使收集了代理,也只能在 AppDomain 1 中收集对象?

有没有办法禁用生命周期并保持代理(在 AppDomain 2 中)和对象(在 AppDomain1 中)活动,直到代理完成?也许与 ISponsor...?

0 投票
1 回答
1423 浏览

c++ - 调用 OnDestroy() 后 ActiveX 控件 (COleControl) 会发生什么情况?

我有一个用 C++ 编写的在 Internet Explorer 8 中运行的 ActiveX 控件。大多数时候(大约 90%)当包含该控件的选项卡或浏览器关闭时,会出现如下访问冲突:

访问冲突发生在调用 OnDestroy() 之后但在调用控件的析构函数之前。

调试输出说:

我的代码都没有出现在堆栈跟踪中,尽管堆可能在执行期间的某个较早时间点被损坏。

ActiveX 控件在调用 OnDestroy() 和控件的析构函数之间接收哪些生命周期事件?

0 投票
3 回答
1559 浏览

c++ - C++ 标准中的哪些措辞允许 static_cast(malloc(N)); 去工作?

据我了解 5.2.9 静态转换中的措辞,唯一一次void*允许对象指针转换void*的结果是首先是逆转换的结果。

在整个标准中,有一堆对指针表示的引用,指针的表示与void指针的表示相同char,依此类推,但似乎从未明确地说强制转换任意void指针会产生指针到内存中的同一位置,具有不同的类型,很像类型双关是未定义的,其中不双关回到对象的实际类型。

因此,虽然malloc清楚地返回了合适内存的地址等,但据我所见,似乎没有任何方法可以实际使用它,可移植。

0 投票
2 回答
243 浏览

.net - 复杂对象图中 IDisposable 非托管资源的终身问题?

这个问题是关于处理非托管资源(COM 互操作)并确保不会有任何资源泄漏。对于我是否似乎以正确的方式做事的反馈,我将不胜感激。

背景:


假设我有两个课程:

  • 一个类LimitedComResource,它是 COM 对象的包装器(通过某些 API 接收)。这些 COM 对象的数量有限,因此我的类实现了IDisposable接口,该接口将负责在不再需要 COM 对象时释放它。

  • 临时创建另一种类型ManagedObject的对象以在LimitedComResource. 他们不是IDisposable

用图表总结以上内容,我的类可能如下所示:

(稍后我将提供这两个类的示例代码。)

问题:


由于我的临时ManagedObject物品不是一次性的,我显然无法控制它们会存在多长时间。但是,与此同时,我可能会知道 a所指的Disposed 。我如何确保 a不会访问不再存在的 a?LimitedComObjectManagedObjectManagedObjectLimitedComResource

我目前已经通过混合弱引用和一个标志来实现这一点,该标志LimitedResource表明一个对象是否已经被释放。有没有更好的办法?

示例代码(我目前拥有的):


LimitedComResource

ManagedObject

0 投票
3 回答
98 浏览

c++ - 破坏和复制构造的算法

我目前正在建造自己的玩具vector以供玩乐,我想知道当前或下一个标准或 Boost 中是否有类似以下内容?

0 投票
0 回答
717 浏览

wcf - 使用 WCF 的 Unity 子容器生命周期

我们正在使用 Unity 为我们当前的项目在 WCF 服务层提供依赖注入,并且我们按照如下示例编写了服务主机工厂、服务主机、服务行为和实例提供程序:

http://avingtonsolutions.com/blog/post/2008/08/02/Uisng-Uni​​ty-with-a-WCF-Service.aspx

该解决方案非常成功,但我们需要根据每个请求提供对象的上下文解析。到目前为止,我们通过在实例提供者的 GetInstance 方法中创建一个子容器,将上下文注册添加到子容器,并使用子容器执行服务类型的解析来实现这一点。两个容器中的一些注册都使用容器控制的生命周期。

由于我不知道子容器的生命周期,我对这种方法感到担忧:1)子容器是否在 GetInstance 方法结束时超出范围,因此被处置,导致我们的一些容器解析对象被在我们的请求中处理?

2) 或者,父容器是否会在一段时间内紧贴子容器,这是否意味着它会在高流量环境中快速填充子容器实例?

谁能指出我正确的方向?

0 投票
5 回答
2690 浏览

c# - 将大括号用于变量范围的目的是错误的吗?

我有时使用大括号来隔离代码块,以避免以后错误地使用变量。例如,当我SqlCommand在同一个方法中放置多个 s 时,我经常复制粘贴代码块,最后混合名称并执行两次某些命令。添加大括号有助于避免这种情况,因为SqlCommand在错误的地方使用错误会导致错误。这是一个插图:

现在,StyleCop 会在每次块跟随空行时显示警告。另一方面,不放空行会使代码更难理解。

所以,

  1. 仅出于可变范围的目的使用大括号创建代码块有什么问题吗?

  2. If it's all right, how to make it more readable without violating StyleCop rules?

0 投票
3 回答
6321 浏览

c++ - Qt 对象的生命周期

Qt 对象的生命周期是多少?

如:

socket什么时候会被销毁?我应该使用

有什么区别:

我找不到有关此的深入信息,欢迎任何评论或链接。

0 投票
4 回答
3096 浏览

c# - 获取对象处置/销毁的通知

我需要一种方法来跟踪各种类的实例,而这些类不知道它们正在被跟踪。本质上,我有一个类工厂,它创建实例并将它们交给另一个线程。一旦该线程完成并卸载实例,我需要得到通知,以便在所有实例都消失时进行引用计数并退出我的类工厂。

挑战在于我不能修改任何要加载的类,因为我无法控制它们的源代码。

跟踪我创建的实例很简单,我可以在创建它们时将它们放入某种集合中。跟踪他们的破坏给我带来了麻烦。如果我可以修改源代码,我会为每个类添加一个事件,当我创建一个实例时,我会挂钩该事件并将其用作我的通知。但我不能那样做。

所以,问题是这样的:有没有一种偷偷摸摸的方法来监视一个对象实例并检测它何时被破坏?