Questions tagged «new-operator»


18
为什么C ++程序员应尽量减少对“新”的使用?
我在使用std :: list <std :: string>时偶然发现了std :: string的内存溢出问题内存泄漏,其中一条评论说: 停止使用new太多。我看不到您在任何地方使用新产品的任何原因。您可以在C ++中按值创建对象,这是使用该语言的巨大优势之一。 您不必在堆上分配所有内容。 不要像Java程序员那样思考。 我不确定他的意思。 为什么要在C ++中尽可能频繁地通过值创建对象,它在内部有什么不同? 我是否误解了答案?

19
我在什么情况下使用malloc和/或new?
我看到在C ++中有多种分配和释放数据的方法,而且我了解,当您调用malloc时应调用,free并且在使用new运算符时应与之配对,delete将两者混合使用是错误的(例如,调用free()已创建的内容)与new操作员联系),但我不清楚在实际程序中何时应使用malloc/ free以及何时应使用new/ delete。 如果您是C ++专家,请让我知道您在这方面遵循的经验法则或惯例。


14
将参数传递给模板类型的C#通用new()
添加到列表中时,我正在尝试通过其构造函数创建类型T的新对象。 我收到一个编译错误:错误消息是: 'T':创建变量实例时无法提供参数 但是我的类确实有一个构造函数参数!我该如何进行这项工作? public static string GetAllItems<T>(...) where T : new() { ... List<T> tabListItems = new List<T>(); foreach (ListItem listItem in listCollection) { tabListItems.Add(new T(listItem)); // error here. } ... }


11
什么时候应该在C ++中使用new关键字?
我使用C ++已有很短的时间了,而且我一直在想new关键字。简而言之,我应该使用它吗? 1)使用新关键字... MyClass* myClass = new MyClass(); myClass->MyField = "Hello world!"; 2)没有新关键字... MyClass myClass; myClass.MyField = "Hello world!"; 从实现的角度看,它们似乎没有什么不同(但是我敢肯定它们是...)。但是,我的主要语言是C#,当然第一种方法是我习惯的。 困难似乎是方法1与std C ++类一起使用更困难。 我应该使用哪种方法? 更新1: 最近,我将new关键字用于超出范围(即从函数返回)的大型数组的堆内存(或free store)。在使用堆栈之前,该堆栈导致一半的元素在范围之外损坏,切换到堆使用情况可确保元素完好无损。好极了! 更新2: 我的一个朋友最近告诉我,使用new关键字有一个简单的规则;每次键入时new,请键入delete。 Foobar *foobar = new Foobar(); delete foobar; // TODO: Move this to the right place. 这有助于防止内存泄漏,因为您始终必须将删除项放在某个位置(例如,将其剪切并粘贴到析构函数或其他方法时)。

12
如何在C#中的默认浏览器中打开
我正在设计一个小型C#应用程序,其中有一个Web浏览器。我目前在计算机上使用所有默认值,例如Google chrome是我的默认浏览器,但是当我单击应用程序中的链接以在新窗口中打开时,它将打开Internet Explorer。有什么方法可以使这些链接在默认浏览器中打开吗?还是我的计算机出问题了? 我的问题是我的应用程序中有一个网络浏览器,所以说你去Google并输入“ stack stackover”,然后右键单击第一个链接,然后单击“在新窗口中打开”,它将在IE中而不是Chrome中打开。这是我编码不正确的东西,还是计算机上的设置不正确? ===编辑=== 真烦人。我已经知道该浏览器是IE,但之前它运行良好。当我单击链接时,它以chrome打开。当时我使用Sharp开发来开发应用程序,因为我无法启动C#Express。我做了一个全新的Windows安装,由于我在应用程序中的进度不太好,所以我决定重新开始,现在遇到了这个问题。这就是为什么我不确定是否是我的计算机的原因。为什么当单击链接而不是在默认浏览器中简单地打开新链接时,IE会启动整个浏览器?


10
可以删除吗?
是否允许delete this;delete-statement是将在该类实例上执行的最后一条语句?当然,我确定this-pointer 表示的对象是正确new创建的。 我正在考虑这样的事情: void SomeModule::doStuff() { // in the controller, "this" object of SomeModule is the "current module" // now, if I want to switch over to a new Module, eg: controller->setWorkingModule(new OtherModule()); // since the new "OtherModule" object will take the lead, // I want to get rid …


14
新和替代之间的区别
想知道以下内容之间有什么区别: 情况1:基类 public void DoIt(); 情况1:继承的类 public new void DoIt(); 情况2:基类 public virtual void DoIt(); 情况2:继承的类 public override void DoIt(); 根据我运行的测试,案例1和案例2似乎具有相同的效果。有区别还是首选方式?




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.