Crockford的书,JavaScript:The Good Parts,(第114页)说构造函数应始终给出带有首字母大写字母(即Point)的名称,并且带有首字母大写字母的函数名称只能与构造函数一起使用(其他一切都应该是lowerCase).
这个约定有助于我们避免忘记使用new构造函数的运算符.
他接着说,"更好的应对策略是根本不使用new."
我的问题是,我们如何编程JavaScript而不使用它new?
new Object()和new Array()文字{}和[].new Number(),new Boolean()以及new String()用0,true和''.new RegExp()类似的事情/pattern/.我们如何避免new Date()?
而且,最重要的是,我们如何避免使用new自己的自定义对象?
我的函数中有一个变量是静态的,但我希望它在每个线程的基础上是静态的.
如何为我的C++类分配内存,以便每个线程都有自己的类实例副本?
AnotherClass::threadSpecificAction()
{
// How to allocate this with thread local storage?
static MyClass *instance = new MyClass();
instance->doSomething();
}
Run Code Online (Sandbox Code Playgroud)
这是在Linux上.我没有使用C++ 0x,这是gcc v3.4.6.
我想知道是否有办法在PHP中新创建的对象上链接方法?
就像是:
class Foo {
public function xyz() { ... return $this; }
}
$my_foo = new Foo()->xyz();
Run Code Online (Sandbox Code Playgroud)
有人知道实现这个目标的方法吗?
我有以下代码片段在VS2008中生成"如果隐藏意图使用新关键字"警告:
public double Foo(double param)
{
return base.Foo(param);
}
Run Code Online (Sandbox Code Playgroud)
Foo()基类中的函数受到保护,我想将它暴露给单元测试,方法是将它放在包装类中,仅用于单元测试.即包装类不会用于其他任何东西.所以我有一个问题是:这是一种公认的做法吗?
回到new警告.为什么我必须在这种情况下更新覆盖功能?
我是Golang的新手,所以在它的分配让我疯了:
import "sync"
type SyncMap struct {
lock *sync.RWMutex
hm map[string]string
}
func (m *SyncMap) Put (k, v string) {
m.lock.Lock()
defer m.lock.Unlock()
m.hm[k] = v, true
}
Run Code Online (Sandbox Code Playgroud)
后来,我打电话给:
sm := new(SyncMap)
sm.Put("Test, "Test")
Run Code Online (Sandbox Code Playgroud)
这时我得到一个零指针恐慌.
我通过使用另一个函数解决了它,并在之后调用它new():
func (m *SyncMap) Init() {
m.hm = make(map[string]string)
m.lock = new(sync.RWMutex)
}
Run Code Online (Sandbox Code Playgroud)
但我想知道,如果有可能摆脱这个样板初始化?
我知道根据C++标准,如果新的无法分配内存,它应该抛出std :: bad_alloc异常.但我听说有些编译器如VC6(或CRT实现?)不遵守它.这是真的 ?我问这个是因为在每个新语句之后检查NULL会使代码看起来非常难看.
在Java中是否可以使用已经在其中声明的项来创建一个Dictionary?就像下面的C#代码一样:
Dictionary<string, int> d = new Dictionary<string, int>()
{
{"cat", 2},
{"dog", 1},
{"llama", 0},
{"iguana", -1}
};
Run Code Online (Sandbox Code Playgroud)
我该怎么做以及我使用什么类型的?我读过字典已经过时了.
我想要的是:
obj = Foo.new(0) # => nil or false
Run Code Online (Sandbox Code Playgroud)
这不起作用:
class Foo
def initialize(val)
return nil if val == 0
end
end
Run Code Online (Sandbox Code Playgroud)
我知道在C/C++/Java/C#中,我们无法在构造函数中返回一个值.
但我想知道Ruby是否可行.
为什么我在创建一个继承自str(或者也来自int)的类时遇到问题
class C(str):
def __init__(self, a, b):
str.__init__(self,a)
self.b = b
C("a", "B")
TypeError: str() takes at most 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用int而不是str,它会发生同样的情况,但它适用于自定义类.我需要用__new__而不是__init__?为什么?
删除此处分配的所有内存的正确方法是什么?
const char* charString = "Hello, World";
void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
Buffer* buf = new(mem) Buffer(strlen(charString));
delete (char*)buf;
Run Code Online (Sandbox Code Playgroud)
要么
const char* charString = "Hello, World";
void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
Buffer* buf = new(mem) Buffer(strlen(charString));
delete buf;
Run Code Online (Sandbox Code Playgroud)
还是他们都一样?
new-operator ×10
c++ ×3
constructor ×3
c# ×2
inheritance ×2
visual-c++ ×2
dictionary ×1
go ×1
initializer ×1
int ×1
java ×1
javascript ×1
linux ×1
map ×1
oop ×1
php ×1
placement ×1
python ×1
return ×1
ruby ×1
string ×1
visual-c++-6 ×1
warnings ×1