我有课要上
class Circle : public isCircle{
private :
int x;
int y;
vector<Circle*> _neighbors;
}
其中isCircle只是一个接口(具有虚方法),_neighbors包含的指针所指向的圆圈不是由该实例分配的。我的问题是,在这种情况下,默认的复制和赋值操作符是否基本上会执行深度复制?
我有一个包含类、一个包含类和一个数据类。包含类包含包含对象的向量。包含的类包含一个指向数据对象的指针,该数据对象在包含的构造函数中分配到堆上。但是,我不能在析构函数中释放它,因为向量将创建包含的副本,然后销毁它们,因此即使在我们使用的副本中也会破坏数据指针。
TL;博士,这里有一些代码可以解释:
class Data {
public:
Data();
};
class Contained {
private:
Data* data;
public:
Contained();
// what should
我在为指向对象的指针编写复制构造函数时遇到问题。这正是我的问题所在
我有一个将对象s1作为其私有数据成员的G1类。这是一个结构的对象。
该结构由一个vector<pair<int,pointer to another object of a different class>>.组成
现在,当我为G1创建一个指针时,一切正常。
当我试图将这个指针复制到同一个类的另一个新指针时,它正在进行浅层复制。
所以当我尝试删除第一个指针时,第二个指针丢失了它的引用。
我的代码是这样的。
template <typename T,typename V>
class G1{
我有一个C++程序,它使用包含类实例的std::list。例如,如果我调用myList.push_back(MyClass(variable));,它会经历创建临时变量的过程,然后立即将其复制到向量中,然后删除临时变量。这并不像我想要的那样高效,而且当你需要一个深度拷贝的时候也很糟糕。
我希望我的类的构造函数是new之类的,而不必为了第二次分配内存和浪费运行时而实现复制构造函数。我也不希望立即从向量/列表中找到类实例,然后手动分配内存(或者做一些可怕的事情,比如在复制构造函数中分配内存)。
有什么方法可以解决这个问题(我没有使用Visual Studio BTW)吗?
请考虑以下课程:
class A {
char *p;
int a, b, c, d;
public:
A(const &A);
};
请注意,我必须定义一个复制构造函数,以便对"p“进行深度复制。这有两个问题:
大多数字段应该简单地复制。一个接一个地复制它们是丑陋和容易出错的。
更重要的是,每当向类添加新属性时,就需要更新复制构造函数,这将造成维护噩梦。
我个人想做这样的事情:
A(const A &a) : A(a)
{
// do deep copy of p
:::
}
因此,首先调用默认的复制构造函数,然后执行深度复制。
我正在使用库,我想生成这个对象类的一个向量,但是我得到了以下错误:
/usr/include/c++/4.6/ext/new_allocator.h:108:9: error: no matching function for call to ‘DenseCRF::DenseCRF(const DenseCRF&)’
/densecrf2/include/densecrf.h:48:2: note: no known conversion for argument 1 from ‘const DenseCRF’ to ‘DenseCRF&’
以下是DenseCRF.h类的样