在主要功能中我写
Function fun;
fun.AddName("string1");
std::cout << fun.GetNumberOfIndeks();
我在屏幕上看到两个不同的数字:
以下类和方法的定义:
class IFunction
{
public:
virtual void AddName(std::string nazwa_funkcji) = 0;
virtual std::size_t GetNumberOfIndeks() = 0;
};
class Function: public IFunction
{
public:
Function();
void AddName(std::string nazwa_funkcji);
std::size_t GetNumberOfIndeks();
private:
std::vector<std::unique_ptr<std::string>> vp_nazwy_indeksow_;
std::unique_ptr<::std::string> p_nazwa_;
}
Function::Function():p_nazwa_(new std::string(""))
{
}
std::size_t Function::GetNumberOfIndeks()
{
vp_nazwy_indeksow_.size();
}
void Function::AddName(std::string nazwa_funkcji)
{
std::unique_ptr<::std::string> pl_nazwa_funkcji (new std::string(nazwa_funkcji));
p_nazwa_ = std::move(pl_nazwa_funkcji);
}
当我评论第二行时
Function fun;
//fun.AddName("string1");
std::cout << egzFunkcji3.GetNumberOfIndeks();
我在屏幕上看到预期的零与g ++标志-O3。 问题出在哪里?
答案 0 :(得分:4)
这是你的功能:
std::size_t Function::GetNumberOfIndeks() {
vp_nazwy_indeksow_.size();
}
我计算零返回语句,这将导致未定义的行为。
如果您的编译器没有对此发出警告或错误,那么您的编译器就是垃圾,应该用更好的编译器替换。