我想用其他对象的构造函数调用1对象的构造函数,并且在删除东西时遇到问题。代码的重要部分如下所示:将构造函数传递给函数C++而不调用delete
class command {
public:
command(const string& s) {
x = (char*) calloc(s.size()+1, 1);
memcpy(x, s.c_str());
}
~command() {
free(x);
}
private:
char* x;
}
此构造函数mallocs需要在析构函数中释放的char *。
class pair {
public:
pair(command comm1in, command comm2in)
:comm1(comm1in), comm2(comm2in){};
private:
command comm1;
command comm2;
}
这一尝试的2场设置为发送的命令。 我想这也要求他们的拷贝构造函数(可能是错的)
在另一个函数,我呼吁对构造像这样
pair p(command("something"), command("something else"));
不幸的是,这有号召刚刚创造的价值的析构函数,然后在构造函数中对拷贝构造函数的影响。
有没有一种很好的方式来通过复制/删除过程初始化comm1和comm2? 我认为C++ 11有rValue引用和std :: move,但我不知道这些是否会在这里发挥作用。
如果你在C++中,不使用malloc,使用新的std :: string。 – Aganju
@Aganju是否正确,但如果您需要管理自己的资源,请确保遵循[三/五/零]规则(http://en.cppreference.com/w/cpp/language/) rule_of_three)。 –
为什么不在'command'的构造函数和析构函数中设置一个断点?然后,您可以记下每种情况下正在创建和销毁的对象的地址,并查看它们是否匹配,以及每次调用的次数。这可能会让你对发生的事情有所了解。 – user1118321