本文引用自https://blog.csdn.net/qq_37627370/article/details/83012594,本人只是遇到了同样的问题想做个记录,如有侵权请告知删除,谢谢
问题导火线
在C#中 Test test = new Test() 这句话看起来总是怪怪的所以、、、
//在c++中我似乎不怎么接触值类型和引用类型这种说法和概览
接触较多的时 按值传递(按指针传递其实也是按值传递,传递的时一个地址值整数值)和按引用传递
part2
1,看段代码
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Test1 test1 = new Test1();
//在C#中,会分值类型和引用类型,而Class类,则属于引用类型,
//所以这里test1则是一个引用类型的变量
//new Test1()则是一个实例
//在c++中
//Test test1;
//这里test1就是一个实例
test1.num = 1;
fun1(new Test1());//将一个新的实例传给引用类型
int y = test1.num; //y == 1
fun1(test1);
int z = test1.num;// y == 2
}
private static void fun1(Test1 x)
{
x.num = 2;
}
}
internal class Test1
{
public int num { get; set; }
}
}
c++中和new相关的就会涉及到指针
new在c++中则是为了开辟一个内存用来存放相关类型的数据
比如:
int* p = new int;
这里我们开辟了一段内存,这个是为了要放int型数据的,就4个字节吧,然后将这个内存的地址 返回来给指针变量P (这里的内存分配不是在编译阶段完成的,而是在运行阶段完成的)
分配好了 就拿去用吧*p = 1;
当利用完这内存后就需要把它给的销毁掉delete p;
而c++中类的动态内存分配相关细节于《c++ primers plus(第六版)中文版》中的12章节中
而这里只是想表达出:
在c#中 Test1 test1 = new Test1();中相关信息
Test1是个引用类型;test1则是一个引用变量指向new Test1()这块实例;
这里我们看下c++中new 一个class的用法
在c#中和函数引用形参相关的知识点点 ref out ,后面用到的话看-
#include "stdafx.h"
class test1
{
public: int x;
public:
test1(int s)
{
x = s;
};
};
test1* test(test1* x)
{
x->x = 3;
return x;
};
int _tmain(int argc, _TCHAR* argv[])
{
test1* p1 = new test1(2);
test(p1);
int w = p1->x;//w = 3
test1* p = test(new test1(1));
int c = p->x; //c = 3
return 0;
//这里懒得去手动释放掉堆上的内存 可能会造成内存泄漏
//而c#就厉害了,人家自己有一套机制释放在托管堆上的内存(垃圾回收系统),不用程序员操心。
}
其实将c++中的new一个新类和c#中new一个实例化(再引用之类)
而c#中的ref 和out 用法和c++中的引用用法相似
说白了 我感觉C#中的应用类型就是c++中的一个指针类型!
自己用做记录相关知识点,若你看到,则以批判眼光看,怕有些地方没说对,或有些概念不合理,误导你