相关疑难解决方法(0)

我不明白为什么我们需要'new'关键字

我是C#的新手,来自C++背景.在C++中,您可以这样做:

class MyClass{
....
};
int main()
{
   MyClass object; // this will create object in memory
   MyClass* object = new MyClass(); // this does same thing
}
Run Code Online (Sandbox Code Playgroud)

而在C#中:

class Program
{
    static void Main(string[] args)
    {
        Car x;
        x.i = 2;
        x.j = 3;
        Console.WriteLine(x.i);
        Console.ReadLine();

    }
}
class Car
{
    public int i;
    public int j;


}
Run Code Online (Sandbox Code Playgroud)

你不能这样做.我想知道为什么Car x不做它的工作.

c# language-design

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

C#vs C++中的新操作符

来自C++,我对new在C#中使用关键字感到困惑.

我知道它不像C++一样工作new,因为你不必手动控制对象的生命周期,因为C#有垃圾收集.

但是,当阅读其他人的C#代码时,我会注意到代码片段1中的语句.如果new在代码片段2 中完全避免使用它会不会更容易?

片段1

Foo fooInstance = new Foo();
Run Code Online (Sandbox Code Playgroud)

片段2

Foo fooInstance;
Run Code Online (Sandbox Code Playgroud)

我的问题是,代码段1和代码段2之间有什么区别,为什么我更喜欢一个呢?

c# c++ new-operator

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

关于指针的一些问题

我现在是高中三年级,而且我正在学习C++.由于我们已经完成了我们需要了解的一般编程(循环,if语句,函数,结构,数组和二维数组),我们启动了二进制/文本文件,我想我们学习文件学习内存管理.首先,我现在正在努力学习指针,因为如果我理解正确的话,在OOP中它们是必须的.其次,我想知道计算机是如何工作的,背后发生了什么.现在,我制作了这段小代码

int main()
{
    char y;
    char *x;
    x = &y;
    cout << "Write a word: ";
    cin >> x;
    cout << x << endl;
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并且它可以工作,但是当程序关闭时,我得到一个错误,表示变量'y'周围的堆栈已损坏.如果我没有混淆,堆栈是动态内存,堆是静态内存,考虑到我收到此错误,因为当程序关闭时变量y不在内存中.我在正确的道路上吗?

还有一个问题.我无法理解何时以及为什么我应该使用指针,例如:

int main()
{
    int number = 10;
    int* pointer;
    pointer = &number;
    *pointer = 15;
    cout << *pointer << endl;
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能简单地这样做:

int main()
{
    int number = 10;
    number = 15;
    cout << number << endl;
}
Run Code Online (Sandbox Code Playgroud)

我为什么要使用指针?另外,我不明白为什么如果我创建一个char*并分配它,例如"hello"它写的是hello而不是h.基本上,通过声明一个char*我声明一个大小未知的数组,对吧?请告诉我它究竟是做什么的.

c++ pointers

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

当 Java 理解构造函数创建一个新实例时,为什么需要“new”

我在网上搜索了Java中“new”的用法,它是用于创建一个全新的类实例。为什么需要通过“new”关键字明确指示?难道不明白构造函数调用会实例化一个新对象吗?例如,如果没有new,很明显会MyClass AnInstance = MyClass(AnArgument)创建一个新对象。

从实际角度来看,我提出这个问题的原因是因为我认为“新”是为了防范危险而设计的,并且我想了解这种危险。

java new-operator

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

跨编程语言的动态内存分配

我有一个关于动态内存分配的问题。

谈到C时,使用malloc()calloc()realloc()函数分配内存,并使用free()取消分配内存

然而,在像反对面向语言C ++C#Java的,内存是使用动态分配的新的和使用释放删除在的情况下,关键字(运营商)C ++

我的问题是,为什么对于这些​​面向对象的语言,存在用于动态内存分配的运算符而不是函数?即使使用new,最终也像函数一样在分配过程中将指针返回到类对象引用。

这样做仅仅是为了简化语法吗?还是有更深刻的原因?

c c# c++ java memory-management

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

标签 统计

c# ×3

c++ ×3

java ×2

new-operator ×2

c ×1

language-design ×1

memory-management ×1

pointers ×1