代码之家  ›  专栏  ›  技术社区  ›  rerun

马洛卡有新的平衡点吗

  •  2
  • rerun  · 技术社区  · 14 年前

    我是马洛卡的忠实粉丝,但我不能在课堂上使用它。有没有一种基于堆栈的类动态分配方法。

    这是不是一个坏主意,另一个残余的C应该在意识形态上反对或只是继续使用它的有限的目的。

    2 回复  |  直到 14 年前
        1
  •  5
  •   JoeG    14 年前

    通过分配内存(使用malloca),然后使用placement new构造类,可以将malloca与类一起使用。

    void* stackMemory = _malloca(sizeof(MyClass));
    if( stackMemory ) {
       MyClass* myClass = new(stackMemory) MyClass(args);
       myClass->~MyClass();
    }
    

    你是否应该这样做是另一回事…

        2
  •  4
  •   AshleysBrain    14 年前

    您可能应该尽可能避免使用malloca,因为如果分配的内存太多,可能会导致堆栈溢出—特别是如果分配的内存量可变,则会出现问题。

    Joe的代码可以工作,但请注意,在抛出异常或函数提前返回等情况下,析构函数永远不会自动调用,因此仍然存在风险。最好只在malloca分配的任何内存中保留普通的旧数据。

    在堆栈上放置C++对象的最佳方法是:

    MyClass my_stack_class;