问题标签 [object-construction]

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 回答
122 浏览

c++ - What's the difference between push_back({ "George", 1 }) and push_back(Student("Jack", 10));

I was just wondering if there's a difference between the following two lines:

Is one way more efficient than the other? Or is it just a different syntax that completes the same task?

0 投票
0 回答
36 浏览

javascript - JavaScript 对象类

我正在开发基于 JavaScript 的项目,这个项目是由其他开发人员开发的。我对 JavaScript 很熟悉,但我不知道。

我在那个项目中发现了这行代码,我无法理解编写这样的对象。

任何机构都可以帮助我解决这个问题。

0 投票
0 回答
27 浏览

python - 如何正确构造一个新的 Python 对象?

为这个稍微模糊的问题道歉,但我不太确定如何措辞。

以下非常基本的代码示例没有做我期望的事情,我想了解为什么......

输出如下:

因此,第二次构造一个新的 Message 对象时,前一个 dict 对象被传递给构造函数。在这两种情况下, Message() 都没有传递一个 arg,所以我希望它data={}每次都用一个新的空字典来构造。我无法理解它是如何记住前一个的。这对我来说真的没有意义,所以我非常感谢您的解释。

谢谢!

0 投票
3 回答
149 浏览

c++ - 我们真的需要放置新表达式吗?

我试图了解C++ 中的放置新表达式

这个堆栈溢出答案状态T* p = new T(arg);相当于

delete p;相当于

为什么我们需要在T* p = new(place) T(arg);对象构造中放置新表达式,以下不是等价的吗?

0 投票
1 回答
46 浏览

matlab - 我可以在matlab早期调用垃圾收集器吗?

在matlab中,我有一个类在构造过程中绑定共享资源并在删除时释放它。(在我的具体情况下,共享资源是一个我可以通过 http://localhost:1234 与之交互的端口)

它看起来像这样:

当我这样使用它时:

一切正常。我打开和关闭它没有问题。但是当我这样使用它时:

我无法启动可执行文件,因为该端口正在使用中。

事件顺序是这样的:

  1. 构造了 myClass 的第一个副本。端口没有问题
  2. 副本被分配给“实例”变量。
  3. 构造了 myClass 的第二个副本。它无法启动可执行文件,因为端口正在使用中
  4. 新副本分配给“实例”变量
  5. 第一个副本不再有任何引用,并调用其删除方法。这释放了端口。

什么样的解决方法是可能的?

理想情况下,我希望第 5 步只知道它需要提前运行:

  1. 构造了 myClass 的第一个副本。端口没有问题
  2. 副本被分配给“实例”变量。

5. 第一个副本不再有任何对它的引用,并调用它的删除方法。这释放了端口。

  1. 构造了 myClass 的第二个副本。港口也是免费的!
  2. 新副本分配给“实例”变量
0 投票
0 回答
68 浏览

c++ - C ++中的对象创建和对象初始化有什么区别?

Richard Smith 的论文Guaranteed copy elision through simple value categories的这一部分在对象创建和对象初始化之间做出了重要区分(prvalues 在C++11中被定义为创建临时对象或值;它们在 C++17中被重新定义为初始化对象或值):

细化值类别的含义

现在我们对值类别有了一个简单的描述,我们可以重新考虑这些类别中的表达式应该如何表现。特别是,给定一个类 type A,表达式A()当前被指定为创建一个临时对象,但这不是必需的:因为prvalue的目的是执行初始化,A()创建临时对象不应该是表达式的责任. 如有必要,这应该由表达式出现的上下文执行。然而,在许多情况下,没有必要创建这个临时对象。例如:

我们得出结论,类或数组类型的纯右值表达式不应创建临时对象。相反,如果有必要,临时对象由表达式出现的上下文创建。需要创建(“物化”)临时对象的上下文如下:

  • 当prvalue绑定到引用时
  • 当对类纯右值执行成员访问时
  • 对数组纯右值执行数组下标时
  • 当数组纯右值衰减为指针时
  • 当对类纯右值执行派生到基础的转换时
  • 当prvalue用作丢弃值表达式时

请注意,这里的第一条规则已经存在于标准中,以支持非类、非数组类型的纯右值。不同之处在于,通过提议的更改,语言规则现在对于类和非类类型是统一的。

C ++中的对象创建和对象初始化有什么区别?

我一直认为它们是同义词,并且考虑到了这个对象模型

0 投票
1 回答
69 浏览

c++ - 如何在 C++ 中构造派生类的对象

我不是 C++ 专业人士,我主要从事 Java 和 C#。今天老师说了一句话让我很困惑。我试图通过做一些研究来验证信息,但我最终更加困惑。

假设我有 A 类和 B 类。A 类是基类,B 是从 A 派生的。

现在我已经知道,当创建 B 类的对象时,会调用 A 类的构造函数,然后调用 B 类的构造函数。同样,当 B 类的对象被销毁时,会调用 B 类的析构函数,然后调用 A 类的析构函数。

到目前为止,我的理解是 B 类包含 A 类中的所有内容,除了它的构造函数和析构函数。我认为当构建 B 类的对象时,在内存中只创建了一个对象(A 和 B 类型)。

现在我的老师说,当构建 B 时,会创建 2 个单独的对象并以某种方式“链接”在一起:A 类中的一个,然后 B 类中的一个。这两个对象都将存在于内存中,直到调用 B 类对象的销毁. 那么 B 类对象将在 A 类对象被销毁之前被销毁。

哪一个是正确的?

ps对不起,如果我的英语一般,那不是我的母语...

编辑:生病尝试改写:

我认为:B类包含A类的所有属性和方法。当我从B类创建一个对象时,内存中只存在1个对象。调用类 A 的构造函数只是为了初始化我的对象中最初来自类 A 的部分。

老师说:当我从B类创建一个对象时,在内存中创建了2个对象。当我命令销毁我的对象时,首先销毁内存中的 B 类对象,然后销毁同样保留在内存中的 A 类对象。老师永远无法阐明 B 类对象如何能够使用 A 类对象的方法和属性。

对我来说,这似乎也意味着在内存中的某个地方存在一个我不知道并且我几乎无法控制的“幽灵对象”。

0 投票
2 回答
83 浏览

c# - F# 对象树语法

在 C# 中,可以用相当简洁的语法构造对象树:

在 F# 中是否有一种惯用的方式来做类似的事情?

记录有很好的语法:

据我所知,对象构造似乎是另一回事。通常我会编写如下代码:

甚至:

解决该问题的一种方法是使用自定义流式组合运算符:

是否有内置语法来实现这一点 - 或其他推荐的方法?

0 投票
1 回答
32 浏览

java - java构造函数是否应该包含构建自身的逻辑?

我正在开发一个 java 项目,我在其中接收一些 JSON 对象,然后必须通过它们来创建一个域对象,然后我需要进一步处理。目前这个对象的构造函数正在做很多工作来创建一个实例,它看起来像这样:

这似乎不是一个好的做法。测试和记录日志并不容易。问题是我真的不知道在哪里最好这样做。属于这个类的静态方法?建造者或工厂在这里似乎也不合适,因为我只需要创建这一种类型的对象。我倾向于在最初调用 DomainObject 构造函数的方法中创建对象,但由于我的代码中有两个地方会发生这种情况。这将是重复相同的对象创建代码的情况。