new-operator相关内容

将参数传递给模板化类型的 C# 泛型 new()

在添加到列表时,我试图通过其构造函数创建一个 T 类型的新对象. 我收到一个编译错误:错误信息是: 'T':创建变量实例时不能提供参数 但是我的类确实有一个构造函数参数!我怎样才能做到这一点? public static string GetAllItems(...) where T : new(){...列表tabListItems = new List();foreach( ..
发布时间:2021-12-02 13:45:54 C#/.NET

为什么使用'new'会导致内存泄漏?

我首先学习了 C#,现在我开始学习 C++.据我了解,C++ 中的运算符 new 与 C# 中的运算符不同. 您能解释一下示例代码中内存泄漏的原因吗? class A { ... };结构 B { ... };A *object1 = new A();B object2 = *(new B()); 解决方案 发生了什么 当您编写 T t; 时,您正在创建一个 T 类型的对象,自动 ..
发布时间:2021-12-01 15:42:15 C/C++开发

C++ new int[0] -- 会分配内存吗?

一个简单的测试应用: cout 输出: 0x876c0b8 所以看起来它有效.标准对此有何评论?“分配"空内存块总是合法的吗? 解决方案 来自 5.3.4/7 当 direct-new-declarator 中表达式的值为零时,调用分配函数来分配一个没有元素的数组. 来自 3.7.3.1/2 取消引用作为零大小请求返回的指针的效果未定义. 还有 即使 ..
发布时间:2021-12-01 15:39:16 C/C++开发

我什么时候应该在 C++ 中使用 new 关键字?

我使用 C++ 有一段时间了,我一直对 new 关键字感到疑惑.简单地说,我应该使用它,还是不使用它? 使用 new 关键字... MyClass* myClass = new MyClass();myClass->MyField = "Hello world!"; 如果没有 new 关键字... MyClass myClass;myClass.MyField = "Hel ..
发布时间:2021-12-01 15:26:21 C/C++开发

是“删除这个"吗?在 C++ 中允许吗?

是否允许 delete this; 如果删除语句是将在类的该实例上执行的最后一条语句?当然,我确信 this 指针所代表的对象是 newly-created. 我正在考虑这样的事情: void SomeModule::doStuff(){//在控制器中,SomeModule 的“this"对象是“当前模块"//现在,如果我想切换到一个新模块,例如:控制器-> setWorkingModul ..
发布时间:2021-12-01 15:23:27 C/C++开发

在什么情况下我使用 malloc 和/或 new?

我看到在 C++ 中有多种分配和释放数据的方法,我知道当你调用 malloc 时你应该调用 free 并且当你使用 new 操作符你应该与 delete 配对,混合这两者是错误的(例如在用 创建的东西上调用 free()new 运算符),但我不清楚何时应该使用 malloc/free 以及何时应该使用 new/delete 在我现实世界的程序中. 如果您是 C++ 专家,请告诉我您在这方面遵 ..
发布时间:2021-12-01 15:01:53 C/C++开发

类型名称后面的括号与 new 有区别吗?

如果'Test'是一个普通的类,有什么区别: Test* test = new Test; 和 Test* test = new Test(); 解决方案 让我们学究,因为有些差异实际上会影响您的代码行为.以下大部分内容摘自对“旧的新事物"文章的评论. 有时new运算符返回的内存会被初始化,有时则不会,取决于你新建的类型是否为POD(纯旧数据),或者它是包含 POD 成员并使用编译 ..
发布时间:2021-12-01 14:46:37 C/C++开发

“placement new"有什么用?

这里有人用过 C++ 的“placement new"吗?如果是,是为了什么?在我看来,它只对内存映射硬件有用. 解决方案 Placement new 允许您在已分配的内存中构造一个对象. 当您需要构造一个对象的多个实例时,您可能希望这样做以进行优化,并且每次需要新实例时不重新分配内存会更快.相反,为可以容纳多个对象的内存块执行一次分配可能更有效,即使您不想一次使用所有内存也是如此. ..
发布时间:2021-12-01 14:43:01 C/C++开发

为什么 C++ 程序员应该尽量减少“new"的使用?

我偶然发现了堆栈溢出问题使用 std::list 时 std::string 的内存泄漏 和 其中一条评论是这样说的: 停止使用 new 这么多.我看不出你在任何地方使用 new 的任何理由你做到了.您可以在 C++ 中按值创建对象,它是使用该语言的巨大优势. 您不必分配堆上的一切. 不要像 Java 程序员那样思考. 我不太确定他的意思是什么. 为 ..
发布时间:2021-12-01 14:42:38 C/C++开发

新建和覆盖的区别

想知道以下之间有什么区别: 案例 1:基类 public void DoIt(); 案例一:继承类 public new void DoIt(); 案例 2:基类 public virtual void DoIt(); 案例2:继承类 public override void DoIt(); 根据我运行的测试,案例 1 和案例 2 似乎具有相同的效果.有什么区别,或者更喜欢的 ..
发布时间:2021-12-01 09:44:43 C#/.NET

JavaScript 中的“new"关键字是什么?

JavaScript 中的 new 关键字在第一次遇到时可能会很混乱,因为人们往往认为 JavaScript 不是面向对象的编程语言. 这是什么? 它解决了什么问题? 什么时候合适,什么时候不合适? 解决方案 它做了 5 件事: 它创建了一个新对象.这个对象的类型只是object. 它将这个新对象的内部、不可访问的[[prototype]](即__proto__)属性设置 ..
发布时间:2021-11-30 22:08:32 前端开发

一个图书馆迫使我对新/删除的全局过载!

我正在为一个大型闭源应用程序维护一个插件(作为 dll 实现).这多年来一直运作良好.然而,随着 SDK 的最新更新,供应商超载了全局操作符 new 和 delete.这给我带来了很多麻烦.发生的情况是我的插件分配了一个字符串.我将此字符串传递到静态链接库中,该库对其进行修改(更改其长度从而重新分配它).我的应用程序崩溃了. 原因当然是字符串存在于供应商分配的自定义堆上.静态链接库对该堆一无 ..
发布时间:2021-11-27 08:12:09 C/C++开发

C++ 的新操作是否有任何保证地址返回对齐的保证?

大多数有经验的程序员都知道数据对齐对于程序的性能很重要.我见过一些程序员编写的程序分配比他们需要的更大的缓冲区大小,并使用对齐的指针作为开始.我想知道我是否应该在我的程序中这样做,我不知道是否有任何保证 C++ 的新操作返回的地址对齐.所以我写了一个小程序来测试 for(size_t i = 0; i (p) % 4) {cout ..
发布时间:2021-11-27 08:04:18 C/C++开发

为什么数组有特殊的 new 和 delete?

使用 delete 而不是 delete[] 有什么问题? 在分配和释放数组方面有什么特别的事情发生吗? 为什么它与 malloc 和 free 不同? 解决方案 使用 new[] 创建的对象必须使用 delete[].使用 delete 在数组上是未定义的. 使用 malloc 和 free 时,情况更简单.只有 1 个函数可以释放您分配的数据,也没有调用析构函数的概念 ..
发布时间:2021-11-18 04:22:37 其他开发

是否可以在 C++ 中动态创建恒定大小的数组?

首先,我想向大家保证,我问这个问题是出于好奇.我的意思是,不要告诉我如果我需要这个,那么我的设计就有问题,因为我在实际代码中不需要这个.希望我说服了你 :) 现在问题来了: 对于大多数类型 T 我们可以写 T* p = 新 T; 现在如果 T 是数组类型呢? int (*p)[3] = new ???;//指向 3 数组的指针 = new ??? 我试过了: typedef int ..
发布时间:2021-11-18 03:39:00 其他开发

如何在 C++ 中动态分配数组

我知道如何在 C 中为数组动态分配空间.可以按如下方式完成: L = (int*)malloc(mid*sizeof(int)); 并且可以通过以下方式释放内存: free(L); 我如何在 C++ 中实现等价的? 具体来说,我如何使用 new 和 delete[] 关键字?特别是在创建/销毁链表节点,或在编译时创建和销毁其大小由变量给定的数组的上下文中? 解决方案 int* ..
发布时间:2021-11-18 03:28:24 其他开发

在 Java 中不使用“new"关键字声明数组

以下两个声明有什么区别吗? int arr[] = new int [5]; 和 int arr1[] = {1,2,3,4,5}; arr1 是声明在栈上还是堆上? 解决方案 有一个明显的区别,一个全零,另一个包含 [1..5]. 但这是唯一的区别.两者都是 5 个元素的 int 数组,它们的分配方式相同.用大括号声明只是语法上的方便,没有 new. 注意这种形式只能 ..
发布时间:2021-11-18 03:27:28 其他开发

int *array = new int[n];这个功能实际上在做什么?

我对如何创建动态定义的数组感到困惑: int *array = new int[n]; 我不知道这是在做什么.我可以说它正在创建一个名为 array 的指针,该指针指向一个新的对象/数组 int?有人愿意解释吗? 解决方案 new 分配存储您请求的对象/数组所需的内存量.在这种情况下,n 个整数. 然后指针会将地址存储到这块内存中. 但是要小心,这个分配的内存块不会被释放 ..
发布时间:2021-11-18 02:41:38 其他开发