【发布时间】:2012-01-02 06:05:36
【问题描述】:
这个问题可能很傻,但我想知道,当函数返回指向对象的指针时,是否调用了复制构造函数? 另外,请考虑以下几点:
A* a1 = new A();
A* a = a1.GetPointer();
A* GetPoineter()
{
.....
return new A();
}
也是这样
A* a = a1.GetPointer();
调用复制构造函数?
如果我删除a,是否也会删除a1指向的地址?
【问题讨论】:
-
纯语义,没什么大不了的:
GetPointer()意味着从某个池返回一个指向现有对象的指针。GetNewObject()表示它正在返回一个新分配的对象。 -
如果 GetPointer() 只是从某个池中返回指针会发生什么,现在如果我删除一个,它不会导致某个地方的悬空指针吗?
-
正确。通常,创建对象的人(池管理员)应该是删除它的人。除非您使用智能指针(例如 std::unique_ptr)。
-
so 如果池管理器正在删除对象,那么我不需要执行 delete a,是吗?(再次导致悬空指针...)?
标签: c++ pointers copy-constructor