草庐IT

new_folder

全部标签

c++ - 有没有一种方法可以在不使用 new 的情况下从函数返回抽象(出于性能原因)

例如,我有一些函数pet_maker()创建并返回Cat或Dog作为基础Pet。我想多次调用这个函数,并对返回的Pet做一些事情。传统上我会在pet_maker()中newCat或Dog并返回一个指向它的指针,但是new调用比在堆栈上执行所有操作要慢得多。是否有任何人都可以想到的一种简洁的方式来返回抽象,而不必在每次调用函数时都进行新的操作,或者是否有其他方式可以快速创建和返回抽象? 最佳答案 如果你想要多态性,使用new几乎是不可避免的。但是new工作缓慢的原因是因为它每次都在寻找空闲内存。您可以做的是编写自己的操作符new,理论

objective-c - Objective-C 中的 alloc、init 和 new

这个问题在这里已经有了答案:Useofallocinitinsteadofnew(8个回答)关闭9年前。一本关于iPhone编程的书实例化了这样的类:[[Classalloc]init]另一本关于Objective-C的书是这样写的:[Classnew]有什么区别? 最佳答案 +new在字面上实现为:+(id)new{return[[selfalloc]init];}不多也不少。类可能会覆盖它,但这是非常不典型的,有利于执行+fooWithBar:之类的操作。 关于objective-c

c++ - 在多线程 C/C++ 中,malloc/new 在分配内存时是否锁定堆

我很好奇如果两个线程同时请求分配内存是否存在内存分配锁。我正在使用OpenMP执行多线程、C++代码。操作系统:主要是linux,但也想了解Windows和Mac。 最佳答案 在某些实现中可能会有改进,例如创建特定于线程的缓存(在这种情况下,小块的分配将是无锁的)。例如,this来自谷歌。但总的来说,是的,内存分配是有锁的。 关于c++-在多线程C/C++中,malloc/new在分配内存时是否锁定堆,我们在StackOverflow上找到一个类似的问题: h

c++ - 在多线程 C/C++ 中,malloc/new 在分配内存时是否锁定堆

我很好奇如果两个线程同时请求分配内存是否存在内存分配锁。我正在使用OpenMP执行多线程、C++代码。操作系统:主要是linux,但也想了解Windows和Mac。 最佳答案 在某些实现中可能会有改进,例如创建特定于线程的缓存(在这种情况下,小块的分配将是无锁的)。例如,this来自谷歌。但总的来说,是的,内存分配是有锁的。 关于c++-在多线程C/C++中,malloc/new在分配内存时是否锁定堆,我们在StackOverflow上找到一个类似的问题: h

php - new self(); 是什么意思?在 PHP 中是什么意思?

我从未见过这样的代码:publicstaticfunctiongetInstance(){if(!isset(self::$_instance)){self::$_instance=newself();}returnself::$_instance;}和newclassName()一样吗?编辑如果类是继承的,它指向哪个类? 最佳答案 self指向编写它的类。所以,如果你的getInstance方法是在一个类名MyClass中,下面这行:self::$_instance=newself();会做同样的事情:self::$_instan

c++ - 在没有new的情况下在c++中调用构造函数

我经常看到人们使用C++创建对象ThingmyThing("asdf");而不是这个:ThingmyThing=Thing("asdf");这似乎有效(使用gcc),至少只要不涉及模板。我现在的问题是,第一行是否正确,如果正确,我应该使用它吗? 最佳答案 这两行实际上都是正确的,但做的事情却略有不同。第一行通过调用Thing(constchar*)格式的构造函数在堆栈上创建一个新对象。第二个有点复杂。它基本上执行以下操作使用构造函数Thing(constchar*)创建一个Thing类型的对象使用构造函数Thing(constThi

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

我先学了C#,现在我开始学习C++。据我了解,C++中的运算符new与C#中的运算符不同。你能解释一下这个示例代码中内存泄漏的原因吗?classA{...};structB{...};A*object1=newA();Bobject2=*(newB()); 最佳答案 发生了什么当您编写Tt;时,您正在创建具有自动存储持续时间的T类型的对象。超出范围时会自动清理。当您编写newT()时,您正在创建一个具有动态存储持续时间的T类型的对象。它不会自动清理。您需要将指向它的指针传递给delete以便清理它:但是,您的第二个示例更糟糕:您正在

c++ - 如何在 C++ 中使用 new 运算符初始化内存?

我刚开始接触C++,我想养成一些好习惯。如果我刚刚使用new运算符分配了一个类型为int的数组,如何在不自己循环遍历它们的情况下将它们全部初始化为0?我应该只使用memset吗?有没有“C++”的方式来做到这一点? 最佳答案 这是一个令人惊讶的C++鲜为人知的特性(这一点可以从没有人给出这个答案的事实中得到证明),但它实际上具有用于对数组进行值初始化的特殊语法:newint[10]();请注意,您必须使用空括号——例如,您不能使用(0)或其他任何东西(这就是为什么这只对值初始化有用)。这是ISOC++035.3.4[expr.new

javascript - 将 .apply() 与 'new' 运算符一起使用。这可能吗?

在JavaScript中,我想创建一个对象实例(通过new运算符),但将任意数量的参数传递给构造函数。这可能吗?我想做的是这样的(但下面的代码不起作用):functionSomething(){//initstuff}functioncreateSomething(){returnnewSomething.apply(null,arguments);}vars=createSomething(a,b,c);//'s'isaninstanceofSomething答案从这里的响应中可以清楚地看出,没有内置方法可以使用new运算符调用.apply()。然而,人们提出了一些非常有趣的解决方案

javascript - JavaScript 的 "new"关键字是否被认为是有害的?

在另一个question,一位用户指出new关键字使用起来很危险,并提出了一个不使用new的对象创建解决方案.我不相信这是真的,主要是因为我使用过Prototype、Scriptaculous和其他优秀的JavaScript库,而且他们都使用了new。关键词。尽管如此,昨天我在YUI剧院看DouglasCrockford的演讲,他说了同样的话,他没有使用new。他的代码中不再有关键字(CrockfordonJavaScript-ActIII:FunctiontheUltimate-50:23minutes)。使用new是不是“不好”?关键词?使用它的优点和缺点是什么?