我有一个班级,他的constructor
将一个对象的地址作为参数。检查内存是否在堆上?
MyClass(OtherClass * otherClass);
在这个类的Destructor
我尝试delete
的OtherClass
实例。
~MyClass() {
if(otherClass != nullptr) {
delete otherClass;
}
}
时遇到的问题是,当我把这种constructor
我称之为从stack
而不是从heap
的元素,从而如下面我叫它:
MyClass的MyClass的(& otherObject );
因此,当myClass
对象超出范围时,我得到一个异常。如果我的OtherObject
变量是在stack
或heap
上声明的,我该如何推测?换句话说,我怎么知道我是否可以delete
这个对象?
如果你没有任何物体所有权规则,代码将出现混乱,你将有这样的问题。通常传递一个指针是“给所有权”该对象。如果你不想这样做,你需要将其改为参考。 – tadman
你应该把它作为你的类合同的一个明确部分,不管它是否“获得了所有权”的提供的参数,然后让代码创建负责指定它的对象 –
考虑使用'shared_ptr',尽管这意味着你永远不会有一个“堆栈对象”给它。在安全性方面,这是一件好事 –