标签: new-operator

JavaScript:好的部分 - 如何不使用`new`

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自己的自定义对象?

javascript oop constructor new-operator

57
推荐指数
5
解决办法
2万
查看次数

如何分配线程本地存储?

我的函数中有一个变量是静态的,但我希望它在每个线程的基础上是静态的.

如何为我的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.

c++ linux multithreading new-operator thread-local-storage

57
推荐指数
4
解决办法
4万
查看次数

如何在新创建的对象上链接方法?

我想知道是否有办法在PHP中新创建的对象上链接方法?

就像是:

class Foo {
    public function xyz() { ... return $this; }
}

$my_foo = new Foo()->xyz();
Run Code Online (Sandbox Code Playgroud)

有人知道实现这个目标的方法吗?

php constructor new-operator method-chaining

55
推荐指数
4
解决办法
2万
查看次数

如果打算隐藏,请使用新关键字

我有以下代码片段在VS2008中生成"如果隐藏意图使用新关键字"警告:

public double Foo(double param)
{
   return base.Foo(param);
}
Run Code Online (Sandbox Code Playgroud)

Foo()基类中的函数受到保护,我想将它暴露给单元测试,方法是将它放在包装类中,仅用于单元测试.即包装类不会用于其他任何东西.所以我有一个问题是:一种公认的做法吗?

回到new警告.为什么我必须在这种情况下更新覆盖功能?

c# inheritance warnings new-operator

54
推荐指数
3
解决办法
7万
查看次数

如何在Go结构中初始化成员

我是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)

但我想知道,如果有可能摆脱这个样板初始化?

go new-operator

54
推荐指数
3
解决办法
6万
查看次数

在任何情况下new都会返回NULL吗?

我知道根据C++标准,如果新的无法分配内存,它应该抛出std :: bad_alloc异常.但我听说有些编译器如VC6(或CRT实现?)不遵守它.这是真的 ?我问这个是因为在每个新语句之后检查NULL会使代码看起来非常难看.

c++ memory-management visual-c++-6 new-operator visual-c++

52
推荐指数
3
解决办法
4万
查看次数

C#到Java - 字典?

在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)

我该怎么做以及我使用什么类型的?我读过字典已经过时了.

c# java dictionary map new-operator

51
推荐指数
3
解决办法
4万
查看次数

在Ruby中,'new'和'initialize'之间的关系是什么?初始化时如何返回nil?

我想要的是:

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是否可行.

ruby constructor return initializer new-operator

48
推荐指数
4
解决办法
4万
查看次数

从str或int继承

为什么我在创建一个继承自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__?为什么?

python string int inheritance new-operator

47
推荐指数
5
解决办法
2万
查看次数

放置新的和删除

删除此处分配的所有内存的正确方法是什么?

  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)

还是他们都一样?

c++ new-operator visual-c++ placement

47
推荐指数
3
解决办法
3万
查看次数