如何在向量中释放指针?
How can I deallocate a pointer in vector?
我想擦除向量中的指针,但我也想清空指针内容,以便它不存储A
对象并删除指针
#include <iostream>
#include <vector>
class A {
private:
int a;
public:
A(int a): a(a){}
int getValue(){return a;}
};
int main(int argc, char const *argv[]) {
auto a (new A(3));
auto b (new A(4));
A *c = a;
std::cout << "Pointer a: " << a << 'n';
std::cout << "Pointer b: " << b << 'n';
std::cout << "Pointer c: " << c << 'n';
std::vector<A*> v = {a, b};
for (auto i : v)
std::cout << i << " ";
std::cout << 'n';
v.erase(v.begin());
std::cout << "Pointer c: " << c->getValue() << 'n';
for (auto i : v)
std::cout << i << " ";
std::cout << 'n';
return 0;
}
当我在擦除a
后打印指针c
时,它仍然打印3
听起来你想要的是:
delete v[0];
v[0] = nullptr;
不确定你到底想要什么,但是...使用 C++17,您可以使用智能指针,正如 Rusk 所建议的那样。
这可以轻松解决载体的所有权和删除问题。
在我看来,你需要共享指针(std::shared_ptr
(来a
、b
和v
,而c
需要一个弱指针(std::weak_ptr
(。
因此,当(且仅当(至少有一个维护指针所有权的std::shared_ptr
时,您可以使用c
。
下面是一个没有a
和b
的简化示例,v
重命名为vsp
(对于"共享指针的向量"(,c
重命名为wp
(对于"弱指针"(。
#include <iostream>
#include <memory>
#include <vector>
class A
{
private:
int a;
public:
A (int a0) : a{a0}
{ }
int getValue ()
{return a;}
};
int main ()
{
std::vector<std::shared_ptr<A>> vsp;
vsp.emplace_back( new A{3} );
vsp.emplace_back( new A{4} );
std::weak_ptr<A> wp { vsp.front() };
std::cout << "Pointer 0: " << vsp[0] << " (" << vsp[0]->getValue() << ')'
<< std::endl;
std::cout << "Pointer 1: " << vsp[1] << " (" << vsp[1]->getValue() << ')'
<< std::endl;
if ( auto sp = wp.lock() )
std::cout << "Pointer wp: " << sp << " (" << sp->getValue() << ')'
<< std::endl;
else
std::cout << "Pointer wp: <deleted>" << std::endl;
vsp.clear();
std::cout << "Vector cleared" << std::endl;
if ( auto sp = wp.lock() )
std::cout << "Pointer wp: " << sp << " (" << sp->getValue() << ')'
<< std::endl;
else
std::cout << "Pointer wp: <deleted>" << std::endl;
}
相关文章:
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 如何在向量中释放指针?
- 在C++中释放内存期间,迭代器与指针有何不同
- 包含矢量指针的结构的内存释放问题
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 错误:释放指针未分配在矢量模板类C 中
- 如何在指针初始化为数组的第一个索引后释放指针
- 如何释放指针树中的所有内存
- 从 std::align 中释放指针
- C :释放指针没有分配在课堂上
- 构造向量 C++ 后无法释放指针
- nullptr是否释放指针的内存
- C/C++ 通过调用引用或直接释放指针
- 分段释放指针向量的错误
- 有效地从指向对象本身释放指针
- 如何释放指针向量中的元素
- Sqlite c/c++api,负责从sqlite3_column_text中释放指针
- 释放指针后分配给指针
- 正在释放指针