我是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++,我对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++.由于我们已经完成了我们需要了解的一般编程(循环,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*我声明一个大小未知的数组,对吧?请告诉我它究竟是做什么的.
我在网上搜索了Java中“new”的用法,它是用于创建一个全新的类实例。为什么需要通过“new”关键字明确指示?难道不明白构造函数调用会实例化一个新对象吗?例如,如果没有new,很明显会MyClass AnInstance = MyClass(AnArgument)创建一个新对象。
从实际角度来看,我提出这个问题的原因是因为我认为“新”是为了防范危险而设计的,并且我想了解这种危险。
我有一个关于动态内存分配的问题。
谈到C时,使用malloc(),calloc()和realloc()函数分配内存,并使用free()取消分配内存。
然而,在像反对面向语言C ++,C#和Java的,内存是使用动态分配的新的和使用释放删除在的情况下,关键字(运营商)C ++。
我的问题是,为什么对于这些面向对象的语言,存在用于动态内存分配的运算符而不是函数?即使使用new,最终也像函数一样在分配过程中将指针返回到类对象引用。
这样做仅仅是为了简化语法吗?还是有更深刻的原因?