0
在我的代碼中,我沒有爲複雜和組合類定義複製構造函數。我希望使用由編譯器提供給我的拷貝構造函數複製構造函數需要用互斥量明確定義
#include<boost/make_shared.hpp>
#include<boost/shared_ptr.hpp>
#include <boost/thread/mutex.hpp>
class Complex
{
private :
std::string _a;
std::string _b;
};
class Composition
{
public:
Composition(){}
Composition(int x, int y)
{
_x = x;
_y = y;
}
private:
int _x;
int _y;
Complex obj;
};
int main()
{
//Used make_shared this way on purpose
boost::shared_ptr<Composition> ptr = boost::make_shared<Composition>(Composition(1,2));
}
上面的代碼編譯沒有任何問題。
現在我改變了複雜的類如下
class Complex
{
private :
std::string _a;
std::string _b;
boost::mutex _mutex;
};
當我編譯的代碼,我在定義自己的拷貝構造函數得到錯誤
/usr/local/include/boost/smart_ptr/make_shared.hpp:660: error: no matching function for call to ‘Composition::Composition(const Composition&)’
note: candidates are: Composition::Composition(int, int)
note: Composition::Composition()
note: Composition::Composition(Composition&)
我有過去的這個問題現在爲空的身體組成。
但是我仍然不確定爲什麼我必須在一個案例中創建自己的拷貝構造函數,並且能夠通過編譯器在另一個案例中生成一個。罪魁禍首當然是互斥體。它是否是互斥體創建此問題的不可複製的屬性還是我錯過的其他東西?