我想用其他對象的構造函數調用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