首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

字节一面,轻松通过!

Java的vector和list有什么区别? 线程安全性: Vector是线程安全的类,它的方法都是同步的(synchronized),因此可以在多线程环境下安全地使用。...如果需要在多线程环境下使用,可以通过Collections.synchronizedList方法来获得一个线程安全的List,但这样可能会降低性能。...但是,Vector的增长策略是加倍当前容量,而ArrayList是增加50%。 性能: 由于Vector的方法都是同步的,因此在单线程环境下性能可能会略低于ArrayList。...Base* ptr = new Derived(); ptr->display(); // 调用Derived类中的display()函数 虚函数表(vtable) C++ 使用虚函数表(vtable...(20), deleter); 使用注意事项 避免循环引用:std::shared_ptr 可能会出现循环引用导致资源无法释放的问题。

18110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++关键知识点梳理

    左值引用&右值引用左值引用:常规引用,可支持取地址运算符&获取内存地址;右值引用:右值是临时对象、字面量等表达式,右值引用解决临时对象或函数返回值给左值对象时的深度拷贝;std::move:将输入的左值或右值转换为右值引用类型的临终值...unique_ptr:不支持拷贝和赋值,任何时刻只能有一个unique_ptr指向特定的对象;weak_ptr:为解决shared_ptr对象相互引用导致对象无法释放,衍生出weak_ptr,只使用内置指针...oop封装C++中封装通过对类的访问权限实现,类将客观事物抽象成数据成员和方法,并通过public,protected,private三种访问权限控制其他对象对类的访问和继承。...每个虚继承的子类都有一个虚基类指针(占用一个指针的存储空间,4字节)和虚基类表(不占用类对象的存储空间)当派生类重新定义虚函数时,则将派生类的虚函数的地址添加到虚函数表中。...,则delete pb时只会调用Base的析构函数纯虚函数:虚函数声明时候加上=0,包含纯虚函数的类是抽象类,不可实例化,纯虚函数必须被派生类实现。

    98530

    C++相关基础知识总结笔记

    循环引用问题:如果多个 std::shared_ptr 彼此相互持有对方,则可能会导致引用计数永远不降为零,从而导致内存泄漏。此时可以使用 std::weak_ptr 来打破循环引用。...检测有效性:可以使用 std::weak_ptr::expired() 方法来检查是否还有 std::shared_ptr 持有资源。...获取 std::shared_ptr:如果资源仍然存在,可以使用 std::weak_ptr::lock() 方法来获取一个 std::shared_ptr。...std::shared_ptr 用于共享资源管理,允许多个拥有者,但可能会导致循环引用。 std::weak_ptr 用于辅助解决 std::shared_ptr 的循环引用问题,不增加引用计数。...避免资源泄露:避免由于派生类的析构函数没有被调用而导致的资源泄露问题。 抽象类的使用 抽象类,即纯虚类,类的内部成员函数全部是纯虚函数。

    21330

    现代C++之手写智能指针

    在 C++ 里没有像 Java 的clone 方法这样的约定;一般而言,并没有通用的方法可以通过基类的指针来构造出一个子类的对象来。 那关键点就来了,所有权!,我们可以拷贝时转移指针的所有权!...如果你觉得这个实现很别扭的话,也恭喜你,因为 C++ 委员会也是这么觉得的:auto_ptr 在 C++17 时已经被正式从C++ 标准里删除了。 上面会导致什么问题呢?...析构函数,生成规则和C++98一样,在C++11中有点不同的是,析构函数默认是noexcept。 拷贝构造函数,用户自定义了移动操作会导致不生成默认的拷贝构造函数,其它和C++98的行为一致。...拷贝赋值操作符,用户自定义了移动操作会导致不生成默认的拷贝赋值操作,其它和C++98的行为一致。 移动构造函数和移动赋值操作符,仅仅在没有用户自定义的拷贝操作,移动操作和析构操作的时候才会生成。...ptr5(std::move(cl)); // ok unique转unique } 小结: (1)我们需要了解子类向基类的隐式转换,通过将移动构造函数变为带模板的移动构造函数

    2.9K10

    C++核心准则​讨论:将基类的析构函数设为公共和虚拟的,或受保护的和非虚拟的

    Discussion: Make base class destructors public and virtual, or protected and non-virtual 讨论:将基类的析构函数设为公共和虚拟的...也就是说,是否应该允许通过指向基类的指针进行销毁?如果是,则base的析构函数必须是公共的才能被调用,否则虚拟调用它会导致未定义的行为。...对于基类Base,调用代码可能会尝试通过指向Base的指针销毁派生对象,例如在使用unique_ptr Base>时。...如第39项所述,对于普通成员函数,选择之间是允许以非虚拟方式(通过指向Base的指针)调用它(但如果它调用虚拟函数(例如在NVI或模板方法模式中),则可能具有虚拟行为) ),实际上还是根本没有。...在这种罕见的情况下,您可以将析构函数设为公共的和非虚拟的,但要清楚地表明,不允许将衍生出的对象用作B的多态形式。这正是std :: unary_function的功能。

    1.1K20

    内存泄漏-原因、避免以及定位

    当时用了个比较傻瓜式的方法,通过top命令,将该进程所占的内存输出到本地文件,大概几个小时后,将这些数据导入Excel中,内存占用基本呈一条斜线,所以基本能够确定代码存在内存泄漏,所以就对新上线的这部分代码进行重新...Base { public: Derived(){} ~Derived() { std::cout Derived::~Derived" std::endl;...为了避免因为继承导致的内存泄漏,我们需要将父类的析构函数声明为virtual,代码如下(只列了部分修改代码,其他不变): ~Base() { std::cout Base::~Base..." std::endl; delete []buffer_; } 然后重新执行代码,输出结果如下: int Derived::~Derived in Base::~Base 借助此文...可能有人会问,使用std::shared_ptr可以直接访问对应的成员函数,如果是std::weak_ptr的话,怎么访问呢?

    1.3K31

    【C++进阶学习】第十四弹——特殊类设计——探寻各种情况下类的应用

    只在堆上创建对象 设计策略:使用智能指针(如 std::unique_ptr 或 std::shared_ptr)来管理对象的生命周期。 实现步骤: 智能指针:将对象的创建和管理委托给智能指针。...1.1 声明一个不可继承的类 class Base { public: virtual void doSomething() = 0; // 纯虚函数,使得类成为抽象类 }; class Derived...final : public Base { // 这里尝试继承 Base 类将会导致编译错误 }; 在这个例子中,Derived 类通过继承自 Base 类,并且使用了 final 关键字,使得...void doSomething() = 0; }; class Derived : public Base { // 这里尝试继承 Base 类将会导致编译错误 }; 在这个例子中,由于...在这个例子中,DeletedBase 类的 Derived 类继承尝试会导致编译错误,因为 DeletedBase 类被声明为不能被继承。

    11910
    领券