Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++&引用;新";与java的关键字比较_Java_C++_Object_Pointers_Member Initialization - Fatal编程技术网

c++&引用;新";与java的关键字比较

c++&引用;新";与java的关键字比较,java,c++,object,pointers,member-initialization,Java,C++,Object,Pointers,Member Initialization,首先,我希望这不是一个简单的问题。我是一个java程序员,现在改为C++。 在java中,您可以这样做 Object obj = new Object(); 和我的理解——在C++中你可以看到同样的东西(java中的Objo只会被保存在变量中作为参考): Object* obj = new Object(); 我的问题是:这个物体能活多久?它的寿命和指针的寿命一样长吗?此外,这是否可能实现对象的will成员初始化?如果是这样的话,只要指针被保存为成员VARABLE(直到您存储它的对象被销毁

首先,我希望这不是一个简单的问题。我是一个java程序员,现在改为C++。 在java中,您可以这样做

 Object obj = new Object();
<>和我的理解——在C++中你可以看到同样的东西(java中的Objo只会被保存在变量中作为参考):
Object* obj = new Object();
我的问题是:这个物体能活多久?它的寿命和指针的寿命一样长吗?此外,这是否可能实现对象的will成员初始化?如果是这样的话,只要指针被保存为成员VARABLE(直到您存储它的对象被销毁),该对象就会存在吗


检查是否有打字错误。祝你今天/晚上愉快

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

这将是一个C++的方式来创建一个默认的构造实例:<代码>对象< /> >:

Object obj; // calls the default constructor

您可以创建这样的对象

在.h文件中,有以下对象*foo

在.cpp类中,初始化该类类似于java

foo=新对象()

然后使用delete关键字删除它-在本例中删除foo

我和你在一条类似的船上。我强烈建议你把注意力放在指针上(这个东西)——它真的很强大


编辑:如上所述,您也可以只使用Object foo在堆栈上创建对象,而不是在堆上创建对象。

此对象的寿命是多长?


直到你明确地删除它。与爪哇不同,C++中的对象通过<代码>动态地被新实例化,它们具有用户控制的生命周期,并且不是垃圾收集,因此当所有引用消失时它们不会自动释放。如果你想要这个行为,有类如“代码> STD::AutoPtPt和 STD::UnjyQupPTR/CODE>来处理你。

< P> C或C++,它将生存直到它被删除。您通常希望将任何资源分配/解除分配(可以包括对new/delete和malloc/free的调用)封装在ctor dtor对中。e、 g

class ObjectManager
{
public:
    ObjectManager()
        : mObjectPtr(0)
    {
        mObjectPtr = new Object();
    }

    ~ObjectManager()
    {
        delete mObject;
    }
private:
    Object* mObjectPtr;
};

如果使用这个,则应该在新出现错误的情况下添加一些错误处理。

< P>在C++中没有保证的垃圾收集器,所以它将一直存活到被显式删除。 如果您想使用指针,并且喜欢更具管理性的东西,可以使用


然后在堆栈上创建Objt并在超出范围时自动销毁。< /P>在C++中没有<代码>垃圾回收< /代码>,您必须释放内存。<代码> SRY。任何类型的输入。< /代码> -是出于故意的键入吗?尽管有些地方有类似的语法,C++和java在处理这个主题(以及相关问题)方面有很大的不同。两个数据模型的比较将变成对这两个模型的完整描述。@C.Lang或者更好,使用智能指针。如果您只需要当前范围的对象,只需du

object obj。对于一个简单的物体来说,速度要快几个数量级。对象在作用域末尾自动销毁,并自动调用其析构函数。我要补充的是,
auto_ptr
已被弃用,而
shared_ptr
几乎总是杀伤力过大。新代码应该使用
unique\u ptr
。Java对象也不会被引用计数。@EJP:我的意思是垃圾收集。我更新了我的答案。不是用C,因为C没有
new
delete
。这就是人人都在谈论的RAII正确吗?虽然这很好,但我不确定这将如何解决我的问题,把它作为一个成员变量,我有:OA析构函数是不够的。如果要执行此操作,还需要定义或禁用(至少)复制构造函数和赋值运算符。对于C++11,还应定义移动构造函数和移动赋值运算符。确定:(我会记住这一点。试图找到将向量初始化为成员变量的方法。也许我应该提出一个新问题:P@FredrikBostonWestmanC++的最常见的垃圾回收器是从Leas开始使用的。t C++03.C++11标准增加了一些对垃圾收集的最低限度的支持,即
std::declare_reachable
std::undeclare_reachable
std::declare_no_指针
std::undeclare_no_指针
std::get_指针
。yh:P我正处于*和&.我知道它们之间的区别,但当我开始初始化对象,将它们传递给函数ect时,我会很困惑何时使用什么:PI还不太清楚。小步骤是最好的。我曾经用java编写30-50行代码,按compile,并期待最好的结果!我发现自己在计划、保存和编译时,每次按一下键!我建议您观看NewbostonYouTube上的C++教程:有点慢,但他解释了很多东西。它有一个基本的填充-1:“C++中没有垃圾收集器,所以……”是不正确的。但是没有保证垃圾回收:您必须显式使用垃圾回收器,而且该语言对此的支持非常有限。在发布自己的答案和评论之前,阅读其他答案和评论会有所帮助。
std::unique_ptr<Object> Obj = new Object();
TestMe()
{
  Object Obj();

  //Do something with object

}