我在创建结构矢量时遇到问题.在我的函数AddApp中,我无法将新分配的结构"推回"到向量中.我收到错误消息"无效的参数".我四处看看是否有人有类似的问题,但没有任何帮助.任何人都可以指出我的逻辑中的缺陷是什么?谢谢.
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);
}
Run Code Online (Sandbox Code Playgroud)
您的代码失败的原因是std::vector<Info>::push_back要求您传递类型的对象Info,但是您通过了Info*.
我们可以通过Info直接使用对象而不是使用指向newed变量的指针来解决这个问题:
void AppHolder::AddApp(int R, string N, string L)
{
Info newApp;
newApp.name = N;
newApp.link = L;
newApp.refNumber = R;
dataBase.push_back(newApp);
}
Run Code Online (Sandbox Code Playgroud)
Info* newApp = new Info;声明一个指向Info的指针,并用动态创建的类型对象的地址初始化它Info,必须在以后删除它,否则将不会调用析构函数并且不会释放内存.
Info newApp;声明一个自动变量类型Info,在范围的末尾调用析构函数,并释放其内存.
new在现代C++中不鼓励使用指针,因为它需要手动delete指针,它的异常是不安全的(如果在删除之前抛出异常,资源不会被删除)并涉及编写大量代码(复制构造函数,复制赋值运算符,析构函数) ,移动构造函数,移动赋值运算符)以确保您的类正常工作.但是,有些情况需要使用指针(在容器中存储派生类的实例),在这种情况下,您希望使用可以为您管理资源的智能指针.
| 归档时间: |
|
| 查看次数: |
22964 次 |
| 最近记录: |