首先,我希望这不是一个共和国。我是一名java程序员,现在改为c ++。 在java中你可以这样做
Object obj = new Object();
根据我的理解,你可以用c ++中的相同的东西(看看java中的obj如何只保存在变量中作为参考),如下所示:
Object* obj = new Object();
我的问题是:这个对象有多长时间了?只要指针有效,它会活着吗?还有,这可能会成为一个对象的成员初始化吗?如果指针被保存为可变成员(直到你存储它的对象是破坏者),那么对象是否会存在?
对于任何拼写错误。祝你有个美好的一天!
答案 0 :(得分:6)
对象一直存在,直到有人在指向它的指针上调用delete
。您不应该使用new
和delete
,除非您实现了一些没有其他选项的库功能,并且您确实知道您在做什么。默认操作不应该是直接使用new
,除非是初始化smart pointer或插入到负责内存管理的某个类中。
这将是创建Object
的默认构造实例的C ++方法:
Object obj; // calls the default constructor
答案 1 :(得分:2)
此对象存活多长时间?
直到你明确delete
它为止。与Java不同,C ++中通过new
动态实例化的对象具有用户控制的生命周期,并且不会被垃圾收集,因此当它们的所有引用都消失时,它们不会自动释放。如果您想要这种行为,可以使用std::auto_ptr
和std::unique_ptr
等类来为您处理。
答案 2 :(得分:0)
在C或C ++中,它会一直存在直到被删除。您通常希望在ctor dtor对中包装任何资源分配/释放(可以包括对new / delete和malloc / free的调用)。 e.g。
class ObjectManager
{
public:
ObjectManager()
: mObjectPtr(0)
{
mObjectPtr = new Object();
}
~ObjectManager()
{
delete mObject;
}
private:
Object* mObjectPtr;
};
如果你使用它,你应该添加一些错误处理,以防新的东西出错。
答案 3 :(得分:0)
C ++中没有保证的垃圾收集器,所以它会一直存在,直到它被明确删除。
如果您想使用指针并喜欢更多管理的内容,您可以使用smart pointer
std::unique_ptr<Object> Obj = new Object();
根据链接的答案,有几种不同类型的智能指针,但基本上智能指针会在超出范围时自动销毁该对象。
至于您的问题的成员初始化部分,您可以
TestMe()
{
Object Obj();
//Do something with object
}
然后Obj在堆栈上创建,并在超出范围时自动销毁。