标签: new-operator

JavaScript中的'new'关键字是什么?

newJavaScript中的关键字在第一次遇到时会非常混乱,因为人们倾向于认为JavaScript不是面向对象的编程语言.

  • 它是什么?
  • 它解决了什么问题?
  • 什么时候适当,什么时候不适合?

javascript new-operator

1684
推荐指数
12
解决办法
25万
查看次数

964
推荐指数
5
解决办法
11万
查看次数

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

在使用std :: list <std :: string>时偶然发现Stack Overflow问题内存泄漏与std :: string,其中一条评论说:

停止使用new这么多.我看不出你在任何地方使用新的任何理由.您可以使用C++中的值创建对象,这是使用该语言的巨大优势之一.您不必在堆上分配所有内容.不要像Java程序员那样思考.

我不太确定他的意思是什么.为什么要尽可能经常地用C++中的值创建对象,它在内部有什么区别?我误解了答案吗?

c++ heap memory-management c++-faq new-operator

833
推荐指数
13
解决办法
12万
查看次数

在什么情况下我使用malloc vs new?

我在C++中看到有多种方式来分配和释放数据,我知道当你打电话给malloc你时应该打电话free,当你使用new操作员时你应该配对,delete将两者混合是错误的(例如,调用free()创建的东西)与new操作员),但我不知道何时应该使用malloc/ free何时应该在我的真实世界程序中使用new/ delete.

如果您是C++专家,请告诉我您在此方面遵循的任何经验法则或惯例.

c++ malloc memory-management new-operator

447
推荐指数
12
解决办法
26万
查看次数

将参数传递给模板化类型的C#generic 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.
   } 
   ...
}
Run Code Online (Sandbox Code Playgroud)

.net c# generics new-operator

395
推荐指数
10
解决办法
19万
查看次数

"放置新"有什么用途?

有没有人曾经使用过C++的"贴牌新品"?如果是这样,那该怎么办?在我看来,它只对内存映射硬件有用.

c++ memory-management placement-new new-operator

385
推荐指数
18
解决办法
16万
查看次数

使用"Object.create"而不是"new"

Javascript 1.9.3/ECMAScript 5介绍Object.create道格拉斯·克罗克福德等人长期以来一直在倡导.如何new在下面的代码中替换Object.create

var UserA = function(nameParam) {
    this.id = MY_GLOBAL.nextId();
    this.name = nameParam;
}
UserA.prototype.sayHello = function() {
    console.log('Hello '+ this.name);
}
var bob = new UserA('bob');
bob.sayHello();
Run Code Online (Sandbox Code Playgroud)

(假设存在MY_GLOBAL.nextId).

我能想到的最好的是:

var userB = {
    init: function(nameParam) {
        this.id = MY_GLOBAL.nextId();
        this.name = nameParam;
    },
    sayHello: function() {
        console.log('Hello '+ this.name);
    }
};
var bob = Object.create(userB);
bob.init('Bob');
bob.sayHello();
Run Code Online (Sandbox Code Playgroud)

似乎没有任何优势,所以我想我没有得到它.我可能过于新古典主义了.我应该如何使用MY_GLOBAL.nextId创建用户'bob'?

javascript constructor new-operator object-create

364
推荐指数
8
解决办法
17万
查看次数

使用{}或new Object()在JavaScript中创建一个空对象?

在JavaScript中创建空对象有两种不同的方法:

var objectA = {}
var objectB = new Object()
Run Code Online (Sandbox Code Playgroud)

脚本引擎如何处理它们有什么不同吗?有没有理由使用一个而不是另一个?

类似地,也可以使用不同的语法创建一个空数组:

var arrayA = []
var arrayB = new Array()
Run Code Online (Sandbox Code Playgroud)

javascript arrays object new-operator javascript-objects

359
推荐指数
7
解决办法
51万
查看次数

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

我一直在使用C++,我一直在想新的关键字.简单地说,我应该使用它吗?

1)使用关键字...

MyClass* myClass = new MyClass();
myClass->MyField = "Hello world!";
Run Code Online (Sandbox Code Playgroud)

2)没有新的关键字......

MyClass myClass;
myClass.MyField = "Hello world!";
Run Code Online (Sandbox Code Playgroud)

从实现的角度来看,它们看起来并没有什么不同(但我确定它们是......)但是,我的主要语言是C#,当然第一种方法就是我习惯的方法.

困难似乎是方法1更难用于std C++类.

我应该使用哪种方法?

更新1:

我最近使用new关键字作为内存(或免费存储)用于超出范围的大型数组(即从函数返回).在我使用堆栈之前,导致一半的元素在范围之外被破坏,切换到堆使用确保元素是完整的.好极了!

更新2:

我的一位朋友最近告诉我,使用new关键字有一个简单的规则; 每次打字new,输入delete.

Foobar *foobar = new Foobar();
delete foobar; // TODO: Move this to the right place.
Run Code Online (Sandbox Code Playgroud)

这有助于防止内存泄漏,因为您总是必须将删除放在某处(即,当您将其剪切并粘贴到析构函数或其他方式时).

c++ pointers reference keyword new-operator

261
推荐指数
6
解决办法
12万
查看次数

如何在C#中的默认浏览器中打开

我正在设计一个小型的C#应用​​程序,其中有一个Web浏览器.我目前在我的计算机上拥有所有默认值,表示谷歌浏览器是我的默认浏览器,但当我单击我的应用程序中的链接以在新窗口中打开时,它会打开Internet Explorer.有没有办法让这些链接在默认浏览器中打开?或者我的电脑有什么问题吗?

我的问题是我在应用程序中有一个webbrowser,所以说你去谷歌并输入"堆栈溢出"并右键单击第一个链接并单击"在新窗口中打开"它在IE而不是Chrome中打开.这是我编码不当的东西,还是我的电脑上的设置不正确

===编辑===

这真的很烦人.我已经知道浏览器是IE浏览器,但我以前工作正常.当我点击它在chrome中打开的链接时.我当时正在使用sharp develop来制作应用程序,因为我无法启动c#express.我做了一个全新的Windows安装,因为我在我的应用程序中并不太远,我决定重新开始,现在我遇到了这个问题.这就是为什么我不确定它是不是我的电脑.为什么IE会在点击链接时启动整个浏览器,而不是简单地在默认浏览器中打开新链接?

c# browser default window new-operator

238
推荐指数
10
解决办法
29万
查看次数