我正在尝试创建在我的类的构造函数中声明的静态映射。 该地图将在一种方法中初始化并填充数据,并在另一种方法中免费使用。 这是正确的方法吗?
using namespace std;
#include <map>
struct a {
string b;
string c;
}
class aClass:public myClass
{
public:
aClass();
virtual ~aClass();
private:
map<string, a> myMap;
void method(int a);
void amethod(int b);
}
void aClass::method(int a)
{
myMap = new map<string, a>;
// Addition of elements;
}
void aClass::amethod(int b)
{
// retrival of elements
myMap.clear();
delete myMap;
}
答案 0 :(得分:9)
map<string, a> myMap;
....
myMap = new map<string, a>;
此处myMap
不是指针,因此new
的初始化不正确。也许您正在寻找:
myMap = map<string,a>();
复制到myMap
默认初始化地图。
请注意,您不需要(实际上不能)delete myMap
,因为它不是指针。它是一个成员变量,当你的类被销毁时,编译器会自动销毁它。
答案 1 :(得分:2)
void aClass::method(int a)
{
myMap.clear(); // ensure it starts off empty
// Addition of elements;
}
void aClass::amethod(int b)
{
// retrival of elements
myMap.clear(); // maybe not necessary
}
对象myMap
已经存在于aClass
的实例中,并且在构造其包含实例时构造。您不需要使用new
来创建它,这是一个Java和C#功能,其中变量只是对堆上某个实例的引用,而且所有内容都是垃圾回收的。在C ++中,更容易使数据成员成为值而不是指针或对其他对象的引用。