这是我的代码.如果我删除默认构造函数,下面会出现错误.但是如果我添加一个默认构造函数,它将没有编译和运行的问题.想知道为什么?我特别困惑,因为在运行时根本没有使用默认构造函数,为什么在编译时需要它?
#include <iostream>
#include <vector>
#include <string>
class Foo {
public:
//Foo();
Foo(const std::string& name, double score);
Foo(const Foo& other);
Foo(Foo&& other);
const std::string& name() const { return name_; }
double score() const { return score_; }
private:
std::string name_;
double score_;
};
/*
Foo::Foo() {
std::cout << "In default constructor " << std::endl;
name_ = "foo";
score_ = 1.0;
}*/
Foo::Foo(const std::string& name, double score) : name_(name), score_(score) {
std::cout << "In parametered constructor " << std::endl;
}
Foo::Foo(const …Run Code Online (Sandbox Code Playgroud) std :: vector在创建它所包含的对象的新实例时会调用哪个构造函数?我的印象是它调用了默认构造函数但是如果没有定义或者编译器为我做了什么呢?
特别是在这样的情况下:
class Foo
{
public:
Foo(int size)
{
data = new double[size];
}
~Foo()
{
delete[] data;
}
private:
double* data;
};
std::vector<Foo> myVector;
Foo bar(5);
myVector.push_back(bar);
//stuff
Run Code Online (Sandbox Code Playgroud)
当对象具有未知大小直到构建之后,它如何知道要分配多少内存?