问题标签 [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 回答
2680 浏览

c++ - 在调用基类构造函数之前初始化派生类成员变量。这是UB吗?

我想初始化一个派生类的成员变量,然后将它传递给基类构造函数。我想出了下面的解决方案(也在这里:http ://cpp.sh/4uu4q )

1)以下代码是否具有已定义或未定义的行为(UB)?

2)我试图做的是否表明设计不好?

0 投票
1 回答
223 浏览

raku - 如何从哈希构造 Perl6 中的对象?

在 Perl5 中,您可以执行以下操作:

由于自定义BUILDARGS方法,底部的两个调用的工作方式相同,这基本上将它们都变成了 Moo(se)? 所期望的那种哈希引用。

但是我怎样才能在 Perl6 中做同样的事情呢?

那么如何获取在别处创建的散列,并将其转换为类的默认构造函数所需的命名参数类型呢?

0 投票
1 回答
120 浏览

type-conversion - 在 Perl6 类属性中键入强制

像 Perl5 中的大多数东西一样,有很多方法可以创建一个支持自定义类型强制的类的属性。这是一个简单的,从数组引用到哈希:

我一直在尝试将这样的东西移植到 Perl6,似乎我需要的是一种将一个强制Array转换为SetHash. 到目前为止,我能够做到这一点的唯一方法是这样的:

但在我看来,这似乎不是正确的方法,至少对于将奇数列表传递给构造函数会使脚本死亡的微小细节。

那么,这是如何在 Perl6 中完成的呢?为类属性实现自定义类型强制的推荐方法是什么(因为我确定不止一种)?

0 投票
3 回答
1221 浏览

c++ - 为什么编译器在某些情况下只能将 char * 隐式转换为 std::string

这些工作:

但这不会:

如果“hello”在前两种情况下被隐式转换为std::string,为什么不能在最后一种情况下呢?请注意,我没有将WithString构造函数指定为explicit,所以我期望这样的转换。

我可以通过这样做使行为起作用:

我只是对这个奇怪的东西感到好奇。如果我假设一个猜测,我会说这是因为在前两个工作情况下,转换是在const char *to之间std::string,但在错误情况下,这将需要一个 2 转换链,首先是 from const char *to std::string,然后是 from std::stringto WithString。所以也许这就是原因,但我不确定。

0 投票
1 回答
274 浏览

c++ - C++:使用 Memmove 和 Malloc 复制对象

当我惊讶于下面的代码没有按预期工作时,我正在玩模板:

上面的代码应该创建一个传递给它的参数数量不同的对象。但是,当我创建一个以 std::string 为模板的实例时,传递“Hello”参数应该会给我一个指向包含“Hello”的字符串的指针。然而,这种情况并非如此。如果你运行上面的代码,pre 和 post 的值是不同的,pre 是正确的。有谁知道是什么导致了这种不良行为?谢谢。

0 投票
2 回答
53 浏览

java - 实例化后删除对象的变量

所以我有一个需要实例化某些变量的对象。这些变量通过对象数组传递给对象。然后,数组中的每个元素都被分配给一个内部变量。

在分配内部变量并且永远不会再次引用该数组之后,该数组是否会被垃圾收集,还是应该手动完成?

内存很重要,因为我需要创建几百个这样的对象以及其余的代码。

0 投票
2 回答
5216 浏览

c++ - std::initializer_list 构造函数

在这样的代码中:

为什么它调用std::initializer_list<int>构造函数的规范?如果我们定义例如构造函数,它将产生歧义编译错误std::initializer_list<double>。这种构造的规则是什么,为什么std::initializer_list用数字作为模板参数如此具体?

0 投票
2 回答
72 浏览

c++ - 表示一个不能被 ctor-initialization-list 初始化的值

我正在编写一个C带有 type 成员foo的类foo_t。该成员必须在整个C实例的整个运行时间内定义且有效;但是,我没有在编译时构建它的必要信息,即我不能使用

我也不能在调用 ctor 时构造它C,即我不能

相反,我只能在Cctor 中的一些代码运行后才能构建它。编辑:这样做的原因可能是我需要运行一些具有副作用的代码(例如磁盘或网络 I/O)来获取构造参数;而且我还需要运行该代码才能初始化其他成员,因此我不能将其作为初始化列表中的自由函数多次调用。

那么,我应该如何表示foo

  • 如果foo_t可以用一些虚拟/无效/空/空值默认构造,那么我可以让它发生,并且知道它永远不会在那个虚拟状态下被访问是安全的。损害:fooin的声明C并不表明它总是有效的
  • 如果foo_t只有一个有效的状态,即在获得相关信息之前我根本无法构造它,那么:

    • 我可以使用std::unique_ptr<foo_t>;最初它将是nullptr,然后被分配给。缺点:没有迹象表明它在结束后永远不会为空C();无用的分配。
    • 我可以使用std::optional<foo_t>;最初它将是nullopt,然后被分配给。缺点:没有迹象表明它在结束后永远不会是空的C();需要 C++14;“可选”一词表明拥有 是“可选的” foo,而不是

我对第二种情况更感兴趣,因为在第一种情况下,关于 afoo_t有效性的歧义是一种内置的。有没有比我提到的两个更好的选择?

注意:我们无法更改foo_t.

0 投票
1 回答
160 浏览

javascript - 如何在对象构造函数中以某人的 Discord 用户名命名对象?

我正在尝试在 Discord 的 JSON 文件中创建对象构造函数。大型构造函数被命名为“person”,我希望其中的对象是 Discord 消息作者的名字,但我不能将变量命名为“msg.author.username”。我应该怎么办?

0 投票
0 回答
27 浏览

gcc - 在容器上创建可变参数模板对象不起作用

下面是一个例子(不是整个班级,只是相关部分)

说我有以下

然后以下调用正常工作

但是以下会产生编译时错误

错误:

我不确定为什么模板不能使用这种模式,也不确定如何修复它,以便它可以按照我想要的方式工作,基于我看到的使用 std emplace 函数的示例,这应该能够工作。

编辑:基于没有初始化列表的版本可以正常工作的事实,我可以得出结论,问题是由于初始化列表。但是我不明白为什么这会是一个问题,这不应该能够基于调用 B 的 B 的构造函数构造适当的类型吗?