C# 9+ 知道从 LHS 推断出 RHS 的类型,只需New
使用正确的参数进行调用并获得您的对象。无需重复冗长的类型,并且类型始终正确
List<int> ints = New(capacity: 10_000);
Run Code Online (Sandbox Code Playgroud)
可以同样DRY吗new
在 C++ 中可以完成
我有类似的东西使用“安全”new 和删除,将目标作为参数并使用模板推断类型等,但它的可读性比仅仅要差一些my_var = new(arg1, arg2, arg3)
请注意,这是一个关于如何做的问题a = new(1,2,3)
,就像 C# 一样,而不是关于现在在 C++ 中创建新对象,这使得看起来像 list<vector<toupel<int,float,char>>>*a = new list<vector<toupel<int,float,char>>>()
“有时用shared_ptr
and co 进行包装”。
首先,您应该很少在现代 C++ 中使用显式内存管理。使用智能指针,例如std::unique_ptr
所有权语义。
至于你的问题,你可以用大致相同的方式来做,但有点相反:自动推导声明中的类型,并在表达式中指定类型new
:
auto* my_pointer = new MyClass<template_type>(arguments, to, constructor);
Run Code Online (Sandbox Code Playgroud)
或者使用唯一指针:
auto my_unique_pointer = std::make_unique<MyClass<template_type>>(arguments, to, constructor);
Run Code Online (Sandbox Code Playgroud)
至于容器的主题,您几乎不应该创建指向容器的指针。如果您需要一个容器,只需创建它的一个实例:
std::vector<int> v1(10000); // Create a vector of 10000 integers
Run Code Online (Sandbox Code Playgroud)