.NET C++内存使用旧语法泄漏?

1 .net c++ syntax memory-leaks managed-c++

我正在处理我的应用程序中的内存泄漏问题.我将其缩小为旧语法以声明'Single'类型.使用声明创建了一个测试应用程序,它在吃掉大量内存后崩溃了.我错过了什么?

测试代码在这里:

#include "stdafx.h"

using namespace System;

int main()
{
    while(1)
    {
        System::Single * sngTemp =  new System::Single(0.0);
        //System::String  ^sngTemp =  gcnew System::String(S"dsfasdfasdf");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

ild*_*arn 5

这不是"旧语法"与"新语法"问题--C++/CLI具有相同的行为.System::Single是别名float,可以在堆栈,非托管堆或托管堆上分配.

在这里,因为你正在使用未修饰的new,你在非托管堆上分配一个,即完全相同:

float* sngTemp = new float(0.0);
Run Code Online (Sandbox Code Playgroud)

为什么期望这个泄漏?如果要进行垃圾回收,请使用托管分配
(__gc new旧语法); 或者更好的是,根本不在堆上分配值类型,使其成为无问题.