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

c++ - C++ 数据结构对象的生命周期是多少?

假设我有一个Car.h定义了一个名为 Car 的类,并且我有实现 Car.cpp 来实现 my class Car,例如 myCar.cpp可以是:

助手数组的生命周期是多少?我需要说static Helper helpers[];吗?如果我做了一些不好的做法,请告诉我。

0 投票
6 回答
818 浏览

c++ - C++:如何管理对象生命周期和依赖关系?

一个具体的问题:

我有一个主应用程序,它具有 A 类型和 B 类型(以及其他类型)的对象。B类型的对象需要正确构造A对象(因此有一个构造函数A(const B&b)。但是Main可能随时更改它持有的B对象。我如何确保当Main更改其B对象时一个对象的内部引用被改变了?

一般来说,在对象具有依赖关系的情况下,管理对象生命周期的一些好的做法是什么?

0 投票
1 回答
3826 浏览

asp.net - 在页面加载时加载视图状态,在页面卸载时保存(来自基类) - c# Asp.net

请原谅我问了一个平凡的新手问题,但我似乎陷入了课堂生命周期的困境。

所以我有我的页面

BasePage 是这样的:

现在我只想在页面加载时获取 Modal,这是我从构造函数中完成的。如何在页面卸载时保存它?我不能使用析构函数,因为它不可靠。

这种情况的最佳解决方案是什么?

谢谢。

0 投票
4 回答
6510 浏览

c++ - 警告 C4172:返回对绑定到局部变量的 const std::string 的引用。它有多安全?

我刚刚在工作中构建我们的一个项目,我看到添加了一个新功能:

编译器给出警告:

警告 C4172:返回局部变量或临时地址

我认为编译器是对的。这个功能有多安全?

请注意,该函数不会返回const char*,因为字符串文字具有静态存储持续时间。它返回一个引用const std::string

0 投票
1 回答
564 浏览

biztalk - BizTalk 映射 - 脚本 Functoid 对象生命周期,何时初始化和销毁

在 BizTalk 映射中,当您调用脚本功能时,对象(您正在调用的类)是否在第一次调用时初始化并在整个转换过程中保存在内存中?还是每次执行新行或每次调用脚本时都被销毁和初始化?

我之所以问,是因为我就通过脚本功能在内存中缓存一个小型查找表的优点进行了辩论。我想在我们第一次查找第一条记录时缓存一个字典,并使用相同的字典而不访问数据库进行后续查找。

这是一种天真的方法吗?字典会因为对象被重新初始化而丢失,还是一直保存在内存中直到转换结束?Microsoft 对此是否有任何指导(我找不到任何指导)?

0 投票
1 回答
1010 浏览

c++ - 需要帮助了解 luabind 如何实例化类

假设我有这样的课程:

并通过 Luabind 将其暴露给 Lua,如下所示:

最后在这样的脚本中实例化它:

那时 A 的实际“存在状态”是什么?

它是在堆中的某个地方,lua 在某处保留了对它的引用吗?(或 luabind::object?)

我有一种感觉,它只能是一个指针,例如,由 new 或等价物分配。

但是,我可以将函数绑定到接受引用的 lua,比如lua_doSomething(A & a)最终的引用将是一个实际的引用。当然,我知道这很可能只是 luabind 传递a*a,但我不知道它是否是这样发生的。

我问这个的原因是为了更好地理解和预测在脚本中实例化的对象的生命周期。

那,我不确定所有权或生命周期是否会改变,而不是像上面那样将类暴露给 lua,而是这样做:

并像使用它一样

根据我目前理解的逻辑,这种情况需要我进行清理,因为我是分配新对象的人,除非像这样的 luabind 分配与使用绑定的构造函数相同。

简而言之,我真的很困惑对象的生命周期和这里的东西......我搜索了与此相关的关键字,但我只得到像 http://www.gamedev.net/topic/525692-luabind这样的东西-所有权和销毁/

这不是我真正想知道的。我想了解在分配、实例化、生命周期等方面如何在幕后处理事情的具体方式。

0 投票
2 回答
743 浏览

c# - 我可以重写 Dispose 以创建一个始终调用 SaveChanges 的实体类吗?

这是一个相当不错的观点,我希望答案是“一开始就不是一个热门的想法”——也就是说,不管有人愿意放纵,它都有一个我感兴趣的观点。

型号代码:

客户代码:

我不确定的问题是:

  1. Dispose 是否是执行此操作的正确位置,因为我出于某种原因在考虑“完成” - 我总是对 C# 破坏感到困惑。

  2. 如果在客户端代码中引发异常,通常会跳过 SaveChanges,这很好,但如果这按我的想法工作,它总是会调用它。我应该使用空捕获的尝试吗?

    /li>
0 投票
2 回答
245 浏览

c++ - 在 C++ 中链接对临时对象的调用

我有一个对字符串进行转换的类,就像这样

所以我可以创建一个子类

然后我可以使用转换:

有没有更好的设计呢?如果可以的话,我想避免使用动态分配/shared_ptr,但我不确定临时人员是否会在整个通话过程中保持活力。我还希望能够让每个人transer都能够在销毁期间与其父级对话,因此临时人员也需要以正确的顺序销毁。创建链式转换并将其保存以备后用也很困难,因为

将保存指向不再存在的临时对象的指针。做类似的事情

会很安全,但很烦人。有没有更好的方法来执行这些类型的链式操作?

0 投票
2 回答
245 浏览

c++ - 防止临时延长其使用寿命?

这可能是不可能的,但我想知道是否有可能让一个暂时的东西永远不会超过它原来的表达方式。我有一个指向父对象的对象链,以及一个将创建子对象的成员函数,一个简化的例子是here

我想使用的方式person是将它传递给一个函数,如下所示:

没问题。

只要没有一个临时对象存活超过原始表达式,这将正常工作,但是如果我将最终临时对象之一绑定到 const 引用,它的父母将无法存活,并且我得到一个段错误。我可以隐藏person的复制构造函数和赋值运算符,但是有什么办法可以防止这种错误的发生吗?如果可能的话,我想避免动态分配。

0 投票
4 回答
4495 浏览

c++ - 将临时对象移动到向量中

上面的示例产生下一个输出:

问题 :

  1. 为什么执行第一个析构函数(但没有为第二个对象执行)?
  2. 为什么第二个对象的移动在第一个对象的移动之前执行?
  3. 为什么最后每个对象执行两个析构函数?

PS我刚刚检查了,对象确实按预期放置(第一个到向量中的位置0,第二个到向量中的位置1)

PPS 如果重要的话,我使用的是 gcc 4.3,我像这样编译程序: