我接受了以下面试问题:
class A
{
public:
void fun()
{
std::cout << "fun" << std::endl;
}
};
A* a = NULL;
a->fun();
Run Code Online (Sandbox Code Playgroud)
执行此代码时会发生什么,为什么?
我遇到了一个问题std::shared_ptr。我有一个代码:
void Receive(const std::shared_ptr<char[]>& data, uint32_t length) {
this->next->Receive(data + 2, length - 2);
}
Run Code Online (Sandbox Code Playgroud)
我需要将 shared_ptr 增加 2 而不会失去删除内存的能力。
我不想复制数据,因为数据已经在内存中并且我拥有这些数据。如果我可以在不损失性能的情况下更改指针,那么复制数据只是为了替换和删除旧数据是愚蠢的。shared_ptr 可以包含并返回一个指针,但删除另一个吗?
据我所知,shared_ptr 的内部包含一个指向数据的指针,该指针由get()函数返回,并包含对控制块的引用,该引用计数引用,并且应该在所有引用都消失后删除内存。
那么,由于它包含与控制块分开的指针,也许我可以在不更改控制块中分配的内存块的指针的情况下以某种方式更改它,而不会失去删除内存的能力?如果我不能,也许我可以用boost::shared_ptr?
我还没有检查过。我不使用Boost库,但如果它对我有帮助,我会的。