boost::asio(2):shared

Jun 07, 2016 pm 03:15 PM
boost ポインタ 知的

这就得从智能指针说起,智能指针就是利用一个变量的构造和析构函数来动态管理一个指针。 说白了就是:构造--new;析构--delete 我们可以很容易写一个智能指针: template class Tclass TAutoPtr{public: TAutoPtr() { m_t = new T(); cout TAutoPtr::TAutoPt

这就得从智能指针说起,智能指针就是利用一个变量的构造和析构函数来动态管理一个指针。

说白了就是:构造-->new;析构-->delete


我们可以很容易写一个智能指针:

template <class t>
class TAutoPtr
{

public:
    TAutoPtr() {
        m_t = new T();
        cout 使用:


<pre class="brush:php;toolbar:false">int main(int argc, char** argv)
{
    TAutoPtr<int> tt;
    
    return 0;
}</int>
ログイン後にコピー

这没有问题,很OK。


boost::asio就提供了该方法,可以迅速让shared_ptr来管理你的类。

但是这样就导致了一个问题,当你的类派生之enable_shared_from_this的时候,无法在类成员函数里面使用shared_from_this()获取类指针。

如下的用法是错误:

class B { 
public: 
    B(): x_(4) { 
        cout  p(this); 
        cout x_  x(new B); 
    x->f(); 
    return 0; 
} 
ログイン後にコピー

输出为:

B::B() 

B::~B() 
B::~B() 

两次析构同一个对象,发生灾难性后果。


同样,如下的用法也是错误的:

class A : public enable_shared_from_this<a> { 
public: 
    A() { 
        cout x_  p = shared_from_this();
        //cout x_ f();
    
    return 0;
}
</a>
ログイン後にコピー
虽然我们已经将类A派生之enable_shared_from_this,但是我们使用的时候并没有用shared_ptr包装类A。也错误。


总结如下:

1. 将该类派生之enable_shared_from_this。例如:class A : public enable_shared_from_this

2. 使用的时候必须加上shared_ptr abc(new A())


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ゲームの NAT ブーストと Qos、どちらが優れていますか? ゲームの NAT ブーストと Qos、どちらが優れていますか? Feb 19, 2024 pm 07:00 PM

ほぼすべてのゲームがオンラインになっている今日の状況では、ホーム ネットワークの最適化を無視することはお勧めできません。ほぼすべてのルーターには、ユーザーのゲーム体験を向上させるために設計された NATBoost および QoS 機能が装備されています。この記事では、NATBoost と QoS の定義、利点、欠点について説明します。ゲームの NATBoost と Qos、どちらが優れていますか? NATBoost は、ネットワーク アドレス変換ブーストとも呼ばれ、ルーターのパフォーマンスを向上させるためにルーターに組み込まれている機能です。これは、ゲーム デバイスとサーバーの間でデータが転送されるのにかかる時間であるネットワーク遅延を短縮するのに役立つため、ゲームにとって特に重要です。 NATBoostはルーター内のデータ処理方式を最適化することで、データ処理速度の高速化と遅延の低減を実現し、

飛び回ったり、口を開けたり、見つめたり、眉毛を上げたりする顔の特徴をAIが完璧に模倣し、ビデオ詐欺を防ぐことは不可能 飛び回ったり、口を開けたり、見つめたり、眉毛を上げたりする顔の特徴をAIが完璧に模倣し、ビデオ詐欺を防ぐことは不可能 Dec 14, 2023 pm 11:30 PM

これほど強力なAIの模倣能力では、それを防ぐことは本当に不可能です。 AIの発展は今ここまで進んでいるのか?前足で顔の特徴を浮き上がらせ、後ろ足で全く同じ表情を再現し、見つめたり、眉を上げたり、口をとがらせたり、どんなに大袈裟な表情でも完璧に真似しています。難易度を上げて、眉毛を高く上げ、目を大きく開き、口の形も歪んでいるなど、バーチャルキャラクターアバターで表情を完璧に再現できます。左側のパラメータを調整すると、右側の仮想アバターもそれに合わせて動きが変化し、口や目の部分がアップになります。同じです(右端)。この研究は、GaussianAvatars を提案するミュンヘン工科大学などの機関によるものです。

Golang では、ジェネリック関数はポインターと参照型をどのように処理しますか? Golang では、ジェネリック関数はポインターと参照型をどのように処理しますか? Apr 16, 2024 pm 04:06 PM

ジェネリック関数が Go でポインター型を処理する場合、元の変数への参照を受け取り、変数値を変更できるようになります。参照型は渡されるときにコピーされるため、関数は元の変数値を変更できなくなります。実際の例には、汎用関数を使用して文字列または数値のスライスを比較することが含まれます。

数年後にはプログラマーが減少するということをご存知ですか? 数年後にはプログラマーが減少するということをご存知ですか? Nov 08, 2023 am 11:17 AM

「ComputerWorld」誌はかつて、IBM がエンジニアが必要な数式を書いて提出できる新しい言語 FORTRAN を開発したため、「プログラミングは 1960 年までに消滅するだろう」という記事を書きました。コンピューターを実行すればプログラミングは終了します。画像 数年後、私たちは新しいことわざを聞きました: ビジネスマンは誰でもビジネス用語を使って問題を説明し、コンピュータに何をすべきかを伝えることができます。COBOL と呼ばれるこのプログラミング言語を使用することで、企業はもはやプログラマーを必要としません。その後、IBM は従業員がフォームに記入してレポートを作成できるようにする RPG と呼ばれる新しいプログラミング言語を開発したと言われており、会社のプログラミング ニーズのほとんどはこれで完了できます。

歩行者軌跡予測に有効な手法と一般的なBase手法は何ですか?トップカンファレンスの論文を共有! 歩行者軌跡予測に有効な手法と一般的なBase手法は何ですか?トップカンファレンスの論文を共有! Oct 17, 2023 am 11:13 AM

軌道予測はここ 2 年間で注目を集めていますが、そのほとんどは車両の軌道予測の方向に焦点を当てています。本日、自動運転ハートは、歩行者軌道予測のアルゴリズムを NeurIPS - SHENet で共有します。制限されたシーンでは、人間の行動パターンは通常、ある程度、限られたルールに従っています。この仮定に基づいて、SHENet は暗黙のシーン ルールを学習することで人の将来の軌道を予測します。この記事は自動運転ハート様よりオリジナル記事として認定されました!著者の個人的な理解では、人間の動きにはランダム性と主観性があるため、現時点では人の将来の軌道を予測することは依然として困難な問題です。ただし、制約のあるシーンでの人間の動きのパターンは、シーンの制約 (フロア プラン、道路、障害物など) や人間対人間、または人間対オブジェクトの対話性によって異なることがよくあります。

ファーウェイは、心拍数に基づいてユーザーの感情状態を評価できるスマートウェアラブル分野でXuanjiセンシングシステムを発売する ファーウェイは、心拍数に基づいてユーザーの感情状態を評価できるスマートウェアラブル分野でXuanjiセンシングシステムを発売する Aug 29, 2024 pm 03:30 PM

最近、ファーウェイは、Xuanjiセンシングシステムを搭載した新しいスマートウェアラブル製品を9月に発売すると発表しました。これはファーウェイの最新スマートウォッチとなる予定です。この新製品は、高度な感情的健康モニタリング機能を統合し、正確性、包括性、スピード、柔軟性、オープン性、拡張性という 6 つの特徴を備えた包括的な健康評価をユーザーに提供します。このシステムはスーパーセンシングモジュールを使用し、マルチチャンネル光路アーキテクチャ技術を最適化することで、心拍数、血中酸素、呼吸数などの基本的な指標の監視精度を大幅に向上させます。さらに、Xuanji センシング システムは、心拍数データに基づく感情状態の研究も拡張しており、生理学的指標に限定されず、ユーザーの感情状態やストレス レベルを評価することもでき、60 以上のスポーツのモニタリングをサポートしています。健康指標、心臓血管、呼吸器、神経、内分泌、

プログラミングスキルを向上させる高度な Golang ポインタ型メソッド プログラミングスキルを向上させる高度な Golang ポインタ型メソッド Apr 07, 2024 pm 06:42 PM

Go 言語ではポインタ型のアプローチが利用できます。これにより、メソッド シグネチャで明示的にポインタを渡さずに、ポインタ型の関数を定義して、指す値を変更できます。これにより、値によるコピーのパスをコピーする必要がなくなるため、コードが単純になり、効率が向上します。ポインター型メソッドの構文は、typeTypeName*Type\nfunc(t*TypeName)MethodName() です。ポインター型のメソッドを使用するには、その型のインスタンスへのポインターを作成し、そのポインターを使用してメソッドを呼び出します。ポインター型メソッドの利点には、コードの単純さ、効率性、および変更可能性が含まれます。ポインタ型メソッドはポインタ型に対してのみ使用できることに注意してください。また、ポインタ型メソッドを使用する場合は、指す構造体の値が誤って取得される可能性があるため注意が必要です。

C++ 参照とポインター パラメーターの受け渡しを使用するにはどうすればよいですか? C++ 参照とポインター パラメーターの受け渡しを使用するにはどうすればよいですか? Apr 12, 2024 pm 10:21 PM

C++ の参照とポインターはどちらも関数パラメーターを渡す方法ですが、違いがあります。リファレンスは変数のエイリアスです。リファレンスを変更すると元の変数が変更され、ポインタには変数のアドレスが格納されます。ポインタ値を変更しても元の変数は変更されません。参照またはポインターの使用を選択する場合は、元の変数を変更する必要があるかどうか、NULL 値を渡す必要があるかどうか、パフォーマンスに関する考慮事項などの要素を考慮する必要があります。

See all articles