c ++"new"关键字与java的比较

Fre*_*man 0 c++ java pointers object member-initialization

首先,我希望这不是一个公开的.我是一名java程序员,现在改为c ++.在java中你可以这样做

 Object obj = new Object();
Run Code Online (Sandbox Code Playgroud)

根据我的理解,你可以在c ++中做同样的事情(看看java中的obj如何只保存在变量中作为参考),如下所示:

Object* obj = new Object();
Run Code Online (Sandbox Code Playgroud)

我的问题是:这个对象存活了多长时间?只要指针有效,它会活着吗?还有,这可能会成为一个对象的成员初始化吗?如果指针被保存为可变成员(直到你存储它的那个对象是破坏者),那么对象是否会存在?

Srry任何错别字.祝你有美好的一天!

jua*_*nza 6

该对象一直存在,直到有人调用delete指向它的指针.您不应该使用new,delete除非您在没有其他选项的情况下实现某些库功能,并且您真的知道自己在做什么.默认操作不应该是new直接使用,除非是初始化智能指针或插入到负责内存管理的某个类中.

这将是创建默认构造实例的C++方法Object:

Object obj; // calls the default constructor
Run Code Online (Sandbox Code Playgroud)

  • AFAIK最常见的垃圾收集器C++是**[波姆集电极](http://www.hpl.hp.com/personal/Hans_Boehm/gc/)**.至少从C++ 03开始使用它.在C++ 11标准增加了对垃圾收集一些最起码的支持,即**'的std :: declare_reachable`**,**'的std :: undeclare_reachable`**,**'的std :: declare_no_pointers`**,**`的std :: undeclare_no_pointers`**和**'的std :: get_pointer_safety`**. (3认同)
  • @FredrikBostonWestman你不需要做任何特别的事情.向量的默认构造函数做了一些明智的事情. (2认同)