【发布时间】:2013-11-06 13:28:33
【问题描述】:
我是 C++ 新手,所以仍在学习指针并习惯使用它们。
我已经声明了一个对象映射,以便存储用户以后可能使用标签键访问的对象。
map<string,MyObject*> myMap;
我添加到 myMap 的对象是在我的 main 调用的函数中创建的
void myFunction(){
...
MyObject obj1();
MyObject* objPtr;
objPtr = &obj1;
myMap.insert(pair<string,MyObject*>("xxxx", objPtr));
...
}
当我执行这个函数时,对象指针完美地插入到了 myMap,但是在函数执行之后我失去了对 obj1 的引用我猜是因为指针和对象是在函数内部本地创建的,所以我仍然有一个元素“ xxx”在地图中,但我认为之后是一个空引用。
如何全局保存对象和引用?我想在函数中创建这个对象,因为它有一些需要从用户 obj1(m,n) 获取的可变参数。感谢您的帮助。
【问题讨论】:
-
为什么不能在地图中存储对象?这将大大简化事情。
-
你为什么不用
objPtr = new MyObject();而不是MyObject obj1(); objPtr = &obj1;呢?这会在堆上创建超出函数范围的对象。但是,在使用完对象和地图后,您需要删除对象。在您的示例中,对象是在堆栈上创建的,并在函数完成后被删除。 -
您可能想了解
new关键字。 -
您的意思可能是
MyObject obj1;?因为您的代码行MyObject obj1();将定义a function pointer variable。
标签: c++