我在创建结构 vector 时遇到问题。在我的函数 AddApp 中,我无法将新分配的结构“推回”到 vector 中。我收到错误消息“无效参数”。我环顾四周,看看是否有人有类似的问题,但没有任何帮助。谁能指出我的逻辑有什么缺陷?谢谢。
class AppHolder
{
private:
struct Info
{
int refNumber;
string name;
string link;
};
vector<Info> dataBase;
public:
void AddApp(int ,string ,string );
};
void AppHolder::AddApp(int R, string N, string L)
{
Info *newApp = new Info;
newApp -> name = N;
newApp -> link = L;
newApp -> refNumber = R;
dataBase.push_back(newApp);
}
最佳答案
您的代码失败的原因是 std::vector<Info>::push_back
要求您将类型为 Info
的对象传递给它, 但你通过了 Info*
.
我们可以使用 Info
来解决这个问题对象而不是使用指向 new
的指针编辑变量:
void AppHolder::AddApp(int R, string N, string L)
{
Info newApp;
newApp.name = N;
newApp.link = L;
newApp.refNumber = R;
dataBase.push_back(newApp);
}
Info* newApp = new Info;
声明一个指向 Info 的指针,并用 Info
类型的动态创建对象的地址对其进行初始化,之后必须删除,否则不会调用析构函数,也不会释放内存。
Info newApp;
声明类型为 Info
的自动变量在作用域结束时调用哪个析构函数,其内存将被释放。
使用 new
在现代 C++ 中不鼓励使用指针,因为它需要手册 delete
指针,它是异常不安全的(如果在删除之前抛出异常,资源不会被删除)并且涉及编写大量代码(复制构造函数,复制赋值运算符,析构函数,移动构造函数,移动赋值运算符)以确保您的类正常工作正确。但是,在某些情况下需要使用指针(将派生类的实例存储在容器中),在这种情况下,您希望使用可以为您管理资源的智能指针。
关于c++ - 结构 vector C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18321605/