标签: new-operator

new []是否在C++中调用默认构造函数?

当我使用new []创建我的类数组时:

int count = 10;
A *arr = new A[count];
Run Code Online (Sandbox Code Playgroud)

我看到它调用了一个默认的构造函数A count.其结果是arr已经count初始化的类型的对象A.但是,如果我使用相同的东西来构造一个int数组:

int *arr2 = new int[count];
Run Code Online (Sandbox Code Playgroud)

它没有初始化.所有值都类似于-842150451int的默认构造函数将其值赋值给0.

为什么会有这么不同的行为?默认构造函数是否仅针对内置类型调用?

c++ arrays standards new-operator

32
推荐指数
1
解决办法
2万
查看次数

new运算符和Class.newInstance()之间有什么区别?

new运营商和Class.forName(...).newInstance()?有什么区别?它们都创建了一个类的实例,我不确定它们之间的区别.

java reflection new-operator

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

为什么String不需要新的关键字

我是java的新手.

在java中,String是一个class.但是我们不必使用new关键字来创建类的对象,String其中new用于为其他类创建对象.

我听说过类似的Wrapper类Integer,Double它们与此类似.但String不是Wrapper,不是吗?

实际上当我使用时发生了什么

     String message = "Hai";
Run Code Online (Sandbox Code Playgroud)

?? 它有什么不同

String message = new String("Hai");
Run Code Online (Sandbox Code Playgroud)

这是message一个参考变量或其他?是否有其他类不需要new创建对象?

java string object new-operator

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

为什么编译器没有将var []转换为c#中的object []?

这两行之间没有区别,因为第二行中的编译器理解它是int类型的数组.

var x = new int[] { 1, 2, 3 };   //Fine, x is int[]
var x = new [] { 1, 2, 3 };      //Fine, x is int[]
Run Code Online (Sandbox Code Playgroud)

但为什么我不能用不同类型做到这一点?为什么编译器不将我的变量转换为类型对象

var x = new object[] { 1, "df", 5 };   //Fine, x is object[]
var x = new [] { 1, "df", 5 };         //Error! "No best type found for implicity-typed-array"
Run Code Online (Sandbox Code Playgroud)

编辑:

谢谢你的所有答案.但我仍然想知道,使编译器无法转换为类型的所有表达式的优缺点是object什么?(因为我使用var符号,这意味着它不能是任何类型.我这样理解.)为什么编译器不通过继承树找到最近类型的数组成员?

.net c# object new-operator c#-4.0

32
推荐指数
2
解决办法
874
查看次数

删除[]一个对象数组

我已分配和对象数组

Objects *array = new Objects[N];
Run Code Online (Sandbox Code Playgroud)

我该如何删除这个数组?只是

delete[] array;
Run Code Online (Sandbox Code Playgroud)

或者迭代数组的元素?

for(int i=0;i<N;i++)
    delete array[i];
delete[];
Run Code Online (Sandbox Code Playgroud)

谢谢

更新:

我改变了循环体

delete &array[i];
Run Code Online (Sandbox Code Playgroud)

强制代码编译.

c++ arrays new-operator delete-operator

31
推荐指数
5
解决办法
9万
查看次数

调用operator new没有匹配函数

我正在尝试从我在Lua中使用的库中包装一个类.特别是,我正在尝试从SFML中包装颜色类.在这里这里可以看到颜色类的完整源代码.

这就是我失败的功能.

int SFColor_new(lua_State* L)
{
    // omitting part where I set r, g, b, and a
    new (lua_newuserdata(L, sizeof(Color))) Color(r, g, b, a); // Line 47
    luaL_getmetatable(L, LuaInfo<Color>::myMetaTableName);
    lua_setmetatable(L, -2);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

这就是错误

LuaSFMLColor.cpp: In function ‘int ag::SFColor_new(lua_State*)’:
LuaSFMLColor.cpp:47: error: no matching function for call to ‘operator new(unsigned int, void*)’
<built-in>:0: note: candidates are: void* operator new(unsigned int)
make: *** [game] Error 1
Run Code Online (Sandbox Code Playgroud)

我在其他几个地方做类似的事情而没有遇到这个错误,所以我不确定是什么原因导致它.看看Color的源代码,我没有看到任何奇怪或不同寻常的东西,而且我已经没有想法了.我也尝试使用默认构造函数(即没有参数)然后只是设置值,但这也没有任何好处.

c++ new-operator

31
推荐指数
1
解决办法
1万
查看次数

在哪里以及为什么使用int a = new int?

只是好奇,有什么区别:

int A = 100;
Run Code Online (Sandbox Code Playgroud)

int A = new int();  
Run Code Online (Sandbox Code Playgroud)

我知道new用于在堆上分配内存..但我真的没有在这里得到上下文.

c# new-operator

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

'new'关键字在Java中实际上做了什么,我应该避免创建新对象吗?

我刚刚注册了,但是自从我开始学习计算机编程以来,我一直在很好地利用这个网站,我一直在自学并考虑我的一点兴趣.

我确实在寻找类似的问题,但实际上我找不到我想要的答案.现在,意识到,在Java(这是我建议开始使用的语言)中,根据需要声明和实例化变量被认为是很好的编程习惯,请考虑以下几行:

class MyClass {
    void myMethod() {
        AnotherClass myObject = new AnotherClass();
        myObject.doStuff();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,假设我在运行程序时调用了myMethod()10次,那有什么用呢?每次创建一个新对象吗?每次都重新分配myObject变量吗?编译器是否会跳过代码,因为它看到对象已经创建并且变量myObject已经分配给了这样的对象?简而言之:只有当我打算只调用一次该方法时,我才能编写这样的代码吗?我知道......因为问这么愚蠢的问题而感到羞耻,但请给我一个机会!提前致谢!

---------------------------编辑---------------------- -------

所以现在我应该在得到新答案后编辑这篇文章吗?顺便说一下...天哪,很快,非常感谢!哇我很困惑,我想这是因为我一直在教自己......不管怎样,每次new AnotherClassmyObject变量创建一个Object 都没用?我的意思是,如果我想在整个程序中使用myObject变量,那么我不应该声明它一劳永逸吗?也许在另一种方法中,我只会调用一次?因为据我所知,每次调用myMethod()一个新对象时都会创建,从而覆盖myObject自己的属性,即变量,或者我只是在胡说八道?

---------------------------编辑---------------------- -------

我从一些我现在不记得的网站上读到这段代码后出现了疑问:

    public class DataBase {

    private static String buf, retString = "\n";
    private static File file = new File("test.txt");

    public static void readText(JTextArea area) {   
        try {
            FileReader fr = new FileReader (file);
            BufferedReader br = new BufferedReader(fr);
            while ((buf = br.readLine()) != null) {
                area.append(buf); 
                area.append(retString);
            }
            br.close(); 
            fr.close(); …
Run Code Online (Sandbox Code Playgroud)

java constructor object new-operator

31
推荐指数
2
解决办法
7万
查看次数

函数的"静态新"修饰符有什么意义?

今天,我在遗留代码中找到了一些东西.它具有一个功能的"静态新".看起来像这样.

class Foo
{
    public static void Do()
    {
        Console.WriteLine("Foo.Do");
    }
}

class Bar: Foo
{
    public static new void Do()
    {
        Console.WriteLine("Bar.Do");
    }
}
Run Code Online (Sandbox Code Playgroud)

我不理解类Bar中Do方法的静态new修饰符.在C#中,静态方法只能使用类名而不是对象名来调用.因此,我认为拥有"新"与否之间没有任何区别.

通常,如果某些语法不必要,C#只会将其视为错误.任何人都知道为什么C#允许这样的语法?

c# static modifier new-operator

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

为什么在C++中没有放置删除表达式?

为什么C++没有直接对应于贴图新的贴片删除,即调用析构函数并调用适当的贴片删除操作符?

例如:

MyType *p = new(arena) MyType;
...
//current technique
p->~MyType();
operator delete(p, arena);

//proposed technique
delete(arena) p;
Run Code Online (Sandbox Code Playgroud)

c++ new-operator delete-operator c++11

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