假设我有一个包含动态分配成员的类,如下所示:
class example
{
private:
otherClass * pointer;
public:
example(int foo){ pointer = new otherClass(foo); }
~example(){delete pointer;}
};
//defining template parameter
example template(1);
现在让我们假设我想将该模板对象动态推送回向量,如下所示:
std::vector<example> myVector;
for(int i=0; i<5; i++)
myVector.push_back(template);
myVector.erase(myVector.begin());
我的问题是:如何准备类来处理动态分配的指针?我知道我需要重载复制构造函数,但是我是否还需要重载复制赋值?怎么样移动指挥或移动任务?我忘了还有其他预防措施吗?
答案 0 :(得分:0)
我不确定我是否理解你的问题,所以我首先要讲述我的不解之处。
问题是向量中剩下的4个对象现在指向已经删除的一些内存。
我认为解决您的问题的方法是更改类的定义并使用引用计数智能指针。
class example
{
private:
std::shared_ptr<otherClass> pointer;
public:
example(int foo) : pointer(new otherClass(foo)){ }
~example(){}
};
这样,只从向量中删除第5个对象将删除otherClass的对象。
答案 1 :(得分:0)
如何准备类来处理动态分配的指针?我知道我需要重载复制构造函数,但是我是否还需要重载复制赋值?怎么样移动计划员或移动任务?
如何实现动态分配成员的复制有三种选择:
delete
d。std::shared_ptr
)对指针成员进行浅层复制。使用编译器生成的复制构造函数和赋值。