作业仅供参考
Assignments are by reference?
在java中,如果您执行
Myobj one = new Myobj();
Myobj two = one;
然后一个和两个指向同一个对象。
在C++中,如果我这样做了:
Myobj one = new Myobj();
Myobj *two = &one;
这与java示例本质上相同吗?其中修改one
或two
会影响这两个对象?
下面的代码与Java相同。
Myobj one;
Myobj& two = one;
下面的代码使一个和两个点指向同一个位置,即更改其中一个将更改两者。
yobj *one = new Myobj();
Myobj *two = one;
如果你想让两个成为一个的副本,那么
Myobj *one = new Myobj();
Myobj *two = new Myobj();
*two = *one;
它们不一样!
使用new
关键字创建的对象即使在本地作用域之后仍然存在。它们被分配成堆存储。它们返回一个引用,因此您需要一个指针来存储引用值。
创建的对象
without
new
关键字遵循复制语义。如果你有
Object obj1=Object()
Object obj2=obj1;
将创建两个对象。也就是说,obj1的属性值被复制到obj2。
如果你不想创建一个新的对象,你应该使用指针。
例如:
Object obj1=Object()
Object *obj1ref=&obj1; //this is like assigning reference in java
下面的语句说明了声明中cpp注释&
中的变量,一旦赋值,它就不能映射到任何其他对象。所以not
和Java
的引用太接近了。
Object& ref2=obj1;
这里obj1的生存期在局部作用域之后结束。
当您在cpp中像Object obj一样声明时,实际上是在为一个对象分配空间,而不仅仅是像Java
中那样创建引用。在CPP
中,指针最接近java中所称的引用。
Object *obj=new Object();
上面的语句在堆栈以外的内存中创建对象。在使用delete
运算符释放内存或关闭应用程序之前,它都有使用寿命。
在Java
中,所有对象都只在堆中创建。
它们使一个和两个基本上相同:
Myobj *one = new Myobj();
Myobj *two = one;
//one and two are the same thing, pointer's to a Myobj
Myobj one;
Myobj *two = &one;
//one is an object that will be deallocated at end of current scope
//two is a pointer to one
在C++中,new Myobj()
在堆上创建一个Myobj
并返回一个指向它的指针
Myobj *one; //Creates a variable that should point to a Myobj instance
Myobj two = new Myobj(); //Doesn't really work
*two = &one; //Get where two point's at and assign the location of one to it
更新:
Myobj one = new Myobj(); //This doesn't quite work, assigning pointer to class
Myobj *two = &one; //This works, you make a pointer to point to one
要修复您的第一条语句,您可以使用:
Myobj one = Myobj();
//Myobj one(); //This requires the constructor to take arguments, thanks juanchopanza!
Myobj one{}; //Requires C++11, courtesy juanchopanza
Myobj one;
所有人都做同样的事情
一般情况下,以下内容应复制:
Myobj one; //or any variant
Myobj two = one;
或者,如果您更喜欢使用指针:
Myobj *one = new Myobj();
Myobj *two = new Myobj();
*two = *one;
相关文章:
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 如何仅为一个函数添加延迟
- C++错误消息*成员参考.**初学者*
- 运算符C++ "delete []"仅删除 2 个前值
- 如何用参数值调用函数(仅在运行时已知)
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 如何仅使用对象名称打印特定于对象的成员
- MSVC将仅移动结构参数解释为指针
- 参考资源文件VC++中的$(SolutionDir)
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 将执行、作业和WinAPI相乘
- 将未定义的参考错误限制为仅直接依赖性
- 获取迭代器以供常量参考
- C++/CLI 包装器,供本机C++用作 C# 中的参考
- C 样式转换是添加程序集(代码)还是仅供编译器了解情况
- 作业仅供参考
- C++数组衰减不会发生以供参考,为什么?
- 推导参数'T'的冲突类型以供通用参考
- 如何将 ZMQ 发布/订阅模式设置为仅供预授权订阅者使用