【发布时间】:2011-04-15 02:51:55
【问题描述】:
我从 C# 背景转向 C++。假设我有一个方法可以在堆栈上的方法中创建一个对象,然后我将它传递给另一个类方法,该方法将它添加到一个成员向量中。
void DoStuff()
{
SimpleObj so = SimpleObj("Data", 4);
memobj.Add(so);
}
//In memobj
void Add(SimpleObj& so)
{
memVec.push_back(so); //boost::ptr_vector object
}
这是我的问题:
- DoStuff 方法结束后,so 是否会超出范围并从堆栈中弹出?
- memVec 有一个指向 so 的指针,但它被弹出了这里发生了什么?
- 将堆栈对象传递给将它们存储为指针的方法的正确方法是什么?
我意识到这些对于有一定经验的 C++ 程序员来说可能是显而易见的。
标记
【问题讨论】:
-
作为旁注,“SimpleObj so = SimpleObj("Data", 4);"不是很 c++ish,使用 "SimpleObj so("Data", 4);"
-
谢谢,还有一些 C# 宿醉。;
-
@milan1612:不幸的是,它仍然是最便携的符号。一堆 c++ 编译器在后者上失败了,similarly as in the case.
标签: c++ gcc boost memory-management