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

c++ - 在 C++ 标准中临时绑定到成员生命周期语句有什么意义?

这个问题中,用户Happy Mittal引用了 C++03 标准的第 12.2.5 节:临时绑定到构造函数的 ctor-initializer (12.6.2) 中的引用成员,直到构造函数退出

这怎么可能有用呢?我的意思是一旦构造函数退出临时被破坏,但引用仍然绑定 - 现在到一个已经被破坏的对象。

如果外部对象的整个生命周期仍然存在悬空引用,那么仔细指定临时生命周期有什么意义?这种行为在哪种情况下有用?

0 投票
1 回答
3079 浏览

asp.net-mvc - 如何使用 unity 2.0 和 asp.net mvc 为每个 http 请求(或每个 http 上下文)注入依赖项

我已经阅读了很多关于这方面的信息,但我找不到任何最新的信息(截至 2011 年 1 月),关于现在应该如何做到这一点。我已经阅读了一些似乎有答案的好帖子,但没有详细信息。较早的 pre-unity-2 方法主要创建自定义生命周期管理器。现在看来最好的方法是使用在请求开始时创建并在请求结束时处置的子容器,使用容器管理的生命周期。另一个人说他们已经通过createchildcontainer 使用分层生命周期来实现这一点。

我发现的大部分材料都说在我尝试过的 Application_BeginRequest 期间创建子容器。这不起作用,因为我的控制器工厂(来自 MvcContrib 的 IoCControllerFactory)使用在 Application_Start 期间注册的容器(MvcContrib 中 IDependencyResolver 的实现),这是默认/根容器。

我在 web.config 中有我的统一设置,我可以创建子容器,但我似乎无法让任何控制器将它们用于 DI 来为每个请求创建单例。我是否需要创建一个特殊的容器来在控制器工厂中使用,而不是根?它应该是容器管理的还是分层的?我不应该在每个请求上都重新设置 DependencyResolver,不是吗?

0 投票
6 回答
4120 浏览

c++ - 在 C++ 中检查不变量

是否有任何已建立的模式来检查 C++ 中的类不变量?

理想情况下,将在每个公共成员函数的开始和结束时自动检查不变量。据我所知,带有类的 C 语言提供了特殊beforeafter成员函数,但不幸的是,当时契约式设计并不是很流行,除了 Bjarne 之外没有人使用该功能,因此他将其删除。

当然,check_invariants()在每个公共成员函数的开头和结尾手动插入调用既繁琐又容易出错。由于 RAII 是处理异常的首选武器,因此我提出了以下方案,将不变性检查器定义为第一个局部变量,并且该不变性检查器在构造和销毁时检查不变量:

问题#0:我想没有办法声明一个未命名的局部变量?:)

我们仍然必须check_invariants()在构造函数的末尾和析构函数Foo的开头手动调用。Foo但是,许多构造函数体和析构函数体是空的。在那种情况下,我们可以使用 aninvariants_checker作为最后一个成员吗?

问题 #1:即使对象仍在构造中,传递thisinvariants_checker立即通过该指针调用的构造函数是否有效?check_invariantsFoo

问题 #2:您认为这种方法还有其他问题吗?你能改进它吗?

问题 3:这种方法是新的还是众所周知的?有没有更好的解决方案?

0 投票
1 回答
3337 浏览

c++ - 从析构函数间接调用虚函数

让我声明一下:我对构造函数或析构函数中的虚函数调用有清晰的理解。

在下面的代码中,我试图避免虚拟析构函数仅用于实验目的。

现在我的问题是:

在 main 中,对 Destroy fun 的调用调用了正确的虚函数。我希望对 Destroy Function 的任何调用都应该调用正确的虚拟乐趣。

但是放置在 Base 析构函数调用的 Base 虚函数中的同一个 Destroy 函数。

这与静态绑定或编译器优化有关吗?

.

.

0 投票
2 回答
479 浏览

c++ - boost::bind 和对临时变量的引用

假设我有方法:

我可以创建 boost::function:

f其中 temp 是在调用之前删除的 char* 。

0 投票
4 回答
217 浏览

c++ - 参考参数寿命

鉴于以下情况:

在对象 p 的生命周期结束时 _myPrivate 会发生什么?编辑:我仍然可以使用 _myPrivate 访问对象 p 的副本吗?

谢谢!

0 投票
2 回答
998 浏览

c++ - dll / 包中的单格顿生命周期

如果我在 mac 上的 dll 或 bundle 的上下文中创建一个单例类,则该单例类会被实例化一次并由该 dll 的所有实例使用。我正在使用 dll 作为应用程序的插件。现在我想到了以下事情:如果我使用单例类,它将在插件的多个实例之间共享。然而,这使得有效地管理单例类的生命周期变得困难。我能想到的唯一方法是使用引用计数并在引用计数为 0 时使单例删除其自身。

有没有人对此有更好的想法?有没有什么好方法可以将单例对象限制为 dll 的一个实例?

语言是 c++,但解决方案必须在 windows 和 mac 下工作(这里是一个包)。dll 或 bundle 的规范由应用程序给出,因此这里没有什么可更改的。

0 投票
5 回答
173 浏览

c++ - 在超出范围后传递给构造函数的值会发生什么?

我一直在寻找这个问题的答案,但没有找到任何与我的问题相似的东西。

我有一个类,我们称之为它Foo,它在它的构造函数中接受一个const char*指针。在我的代码中,我需要创建一个Foo以 a为参数std::string的新.data()参数。问题是,一旦字符串超出范围,传递给 Foo 的值(或指针,这是我感到困惑的地方......)变得无效。

所以现在字符串是无效的,Fooconst char*是无效的。

如何将字符串数据的值传递给Foo它,这样一旦字符串超出范围,它就不会变得无效?

0 投票
3 回答
1256 浏览

c++ - 这是对临时 std::string 的正确使用吗?

我已经阅读了 C++ 中临时的保证生命周期,并且我相信临时字符串将一直存在,直到赋值被评估,即足够长的时间以使这项工作按预期工作。

曾经遇到过与std::string生命周期相关的错误(不记得它是什么)我宁愿仔细检查......

0 投票
1 回答
106 浏览

c++ - C++——系统在哪里存储返回的字符?

问题> 我们不应该在函数内部返回指针或对局部变量的引用。所以返回变量“aa”不是 funA 函数内部的局部变量。那这是什么?

谢谢