关于c++和c#中的引用

本文引用自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++中的一个指针类型!

自己用做记录相关知识点,若你看到,则以批判眼光看,怕有些地方没说对,或有些概念不合理,误导你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值