我之前一直在用 Java 编程,现在我正在尝试学习 c++,但是在理解指针、深/浅复制、复制构造函数、赋值运算符和那些 c++ 特定的东西方面遇到了麻烦。这并不是真正的代码本身,更多的是它们之间的关系以及为什么/何时需要它们。
所以我试着为自己做一个简单的例子,所以我会掌握它,但我无法让它工作,它一直在崩溃。
这是代码:
class A
{
public:
A();
A(B* v);
A(const A &o);
virtual ~A();
void print(std::ostream &o);
A& operator=(A& o);
friend std::ostream &operator<<(std::ostream &stream, A p);
protected:
private:
B *value;
};
void A::print(std::ostream &o)
{
value->print(o);
}
A& A::operator=(A& o)
{
std::cout << "Operatorn"<< std::endl;
this->value = o.value;
}
A::A()
{
//ctor
}
A::A(B* v)
{
this->value = v;
std::cout << "B konstruktor" << std::endl;
}
A::A(const A& o)
{
std::cout << "Kopieringskonstruktor" << std::endl;
this->value = o.value;
}
A::~A()
{
if(value!=NULL) delete value;
std::cout << "Deletar value" << std::endl;
}
--------------------------------------------------
class B
{
public:
void print(std::ostream &o);
B();
B(int i):value(i){}
virtual ~B();
protected:
private:
int value;
};
--------------------------------------------------
std::ostream &operator<<(std::ostream &stream, A p)
{
p.print(stream);
return stream;
}
int main()
{
vector<A> vecA;
ostream_iterator<A> it(cout);
vecA.push_back(A(new B(5)));
vecA.push_back(A(new B(10)));
copy(vecA.begin(), vecA.end(),it);
return 0;
}
编辑 1
一些澄清,与此类似的问题是我的家庭作业。我应该有一个包含值 *B 的持有者类 A。B 继承给 C 和 D,使我能够将 C 和 D 类都放入值 *B。
我简化并从中删除了代码,因为我认为它与我在内存和分配方面遇到的问题无关。