0

首先,我希望这不是重复的。我是一名java程序员,现在改用c++。在java中你可以这样做

 Object obj = new Object();

据我了解,您可以在 c++ 中进行相同的操作(查看 java 中的 obj 如何仅作为参考保存在变量中),如下所示:

Object* obj = new Object();

我的问题是:这个物体能活多久?它和指针一样长吗?另外,这可能会做一个对象的成员初始化吗?如果是这样,只要将指针保存为成员变量(直到您将其存储在其中的对象被破坏),该对象就会存在吗?

抱歉有任何错别字。有一个美好的一天/晚上!

4

5 回答 5

6

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

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

Object obj; // calls the default constructor
于 2013-02-25T21:30:23.753 回答
2

这个物体能活多久?

直到你明确表示delete它。与 Java 不同,C++ 中通过动态实例化的对象new具有用户控制的生命周期并且不会被垃圾回收,因此当对它们的所有引用消失时,它们不会自动释放。如果您想要这种行为,那么有一些类可以std::auto_ptrstd::unique_ptr您处理。

于 2013-02-25T21:32:23.467 回答
1

你创建一个像这样的对象。

在 .h 文件中,您有以下 Object *foo;

在 .cpp 类中,您可以像 java 一样初始化该类。

foo = 新对象();

然后,您使用 delete 关键字将其删除 - 因此在这种情况下删除 foo。

我和你在一条类似的船上。我强烈建议您了解指针(* 的东西)——它真的很强大。

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

于 2013-02-25T21:32:21.013 回答
0

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

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

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

如果你使用它,你应该添加一些错误处理,以防 new 出现问题。

于 2013-02-25T21:33:42.453 回答
0

C++ 中没有保证的垃圾收集器,因此它会一直存在,直到它被显式删除。

如果您想使用指针并喜欢更易于管理的东西,您可以使用智能指针

std::unique_ptr<Object> Obj = new Object();

根据链接的答案,有几种不同类型的智能指针,但基本上智能指针一旦超出范围就会自动销毁对象。

至于你问题的成员初始化部分,你可以做

TestMe()
{
  Object Obj();

  //Do something with object

}

然后 Obj 在堆栈上创建并在超出范围时自动销毁。

于 2013-02-25T21:57:23.063 回答