什么是吸附性义齿| 站着头晕是什么原因| 爆血管是什么原因引起的| 12356是什么电话| 体征是什么意思| 玫瑰花和什么一起泡水喝好| 什么是原生家庭| 流清鼻涕是什么原因| 沙漏是什么意思| 心慌心闷是什么原因| 游戏bp是什么意思| 知识是什么意思| 金句是什么意思| 6月份怀孕预产期是什么时候| 什么是挠脚心| 138是什么意思啊| 什么补肾最好| 叮咛是什么意思| 天空像什么的比喻句| 肺气不足吃什么食物可以补肺气| 股骨头疼痛吃什么药| 茭白是什么植物| 二级以上医院是什么意思| 为什么会厌学| 哺乳期吃辣椒对宝宝有什么影响| 清白是什么意思| 翻白草长什么样| 未时左眼跳是什么预兆| 回南天是什么意思| 为什么一到晚上就痒| 减肥为什么不让吃南瓜| dyj什么意思| 什么钓鱼愿者上钩| 心电图j点抬高什么意思| 羔羊跪乳是什么意思| 肚脐眼周围是什么器官| 嘌呤是什么意思| 乙状结肠冗长是什么意思| amv是什么意思| 8月13号什么星座| 李世民是什么民族| 党群是什么意思| 牙龈经常发炎是什么原因| 什么牌子好| 疱疹不能吃什么食物| 薄凉是什么意思| 蚂蟥是什么| 职称是什么| 怀孕胸部会有什么反应| 疏肝理气是什么意思| 虾仁和什么炒好吃| 疣是什么| 琳琅是什么意思| 出虚恭什么意思| 做完人流可以吃什么| ips屏幕是什么意思| 早起的鸟儿有虫吃是什么意思| 雅诗兰黛是什么档次| 歇夏是什么意思| pap是什么意思| 吃芒果过敏是什么症状| 像什么| 男士睾丸疼是什么原因| 8月31日什么星座| 天珺手表什么档次| 什么是多动症| 马来西亚人为什么会说中文| 属鸡的本命佛是什么佛| 舌苔红是什么原因| 洋桔梗的花语是什么| 痛风喝什么茶最好| 坐骨神经痛是什么症状| 口干是什么原因引起的怎么治疗| foreverlove是什么意思| 为什么老是抽筋| 墨镜镜片什么材质好| 白气是什么物态变化| 十二月二十三是什么星座| 什么花是绿色的| 鞘膜积液是什么病| 小腿酸软无力是什么原因| 法器是什么意思| 尿素氮是什么| 手突然抽搐是什么原因| 宋朝前面是什么朝代| 今天突然拉稀拉出血什么原因| v4是什么意思| 千张是什么| 舌炎吃什么药好得快| 学生早餐吃什么方便又营养| 眼睛胀是什么原因| 玉五行属什么| 兔死什么悲| 肉身成圣是什么意思| 网络用语是什么意思| 挂钟挂在客厅什么位置好| 肾囊肿是什么原因引起的| 孔雀翎是什么东西| 结甲可能是什么意思| 老年人手抖是什么原因| 吃什么药可以延长性功能| 冲床工是做什么的| 心理障碍是什么病| 老母鸡煲汤放什么食材补气补血| 脾大吃什么药能缩小| 马蜂窝能治什么病| 但闻人语响的但是什么意思| 油价什么时候调整| 什么人不适合做收银员| 致癌是什么意思| 巡抚相当于现在的什么官| 粟是什么农作物| 梦见买鞋子是什么意思| 东吴是现在的什么地方| 鼻窦炎是什么样子的| 蝙蝠进屋有什么预兆| 婴儿八个月可以吃什么辅食| 羊水是什么颜色的| 婠是什么意思| 重阳节吃什么| 中暑了吃什么好| 许久是什么意思| 女生大姨妈推迟是什么原因| 什么样的小船| 为什么不能在床上打坐| 纯原是什么意思| 酸辣土豆丝用什么醋| 红指什么生肖| 低钠盐适合什么人吃| 什么是湿热体质| 梦见蛇在家里是什么意思| 小孩子包皮挂什么科| 孕妇吃什么水果比较好| 幽门螺杆菌抗体阳性什么意思| 什么颜色属土| 高大上是什么意思| tp是什么| 作息是什么意思| 女生长胡子是什么原因| 日逼是什么意思| 八一建军节是什么节日| 查血脂挂什么科| 皇太后是皇上的什么人| 长鱼是什么鱼| 宝宝拉水便是什么原因| 61年属什么生肖| 矬是什么意思| 多饮多尿可能是什么病| 有什么好看的国漫| hyundai是什么牌子| 滚去掉三点水念什么| 早博是什么意思| 长期熬夜会得什么病| 1989年出生是什么命| 铁剂什么时候吃最好| 酷盖是什么意思| 恭请是什么意思| 鼻饲是什么意思| 肾虚吃什么| 后遗症是什么意思| 心脏大是什么原因| 棉毛布是什么面料| 腿长身子短有什么说法| 宫颈潴留囊肿是什么意思| 为什么会湿气重| 学是什么偏旁| 为什么偏偏喜欢你| 对偶是什么意思| 749局是什么| 胃溃疡十二指肠溃疡吃什么药| 产妇适合吃什么水果| 后背发冷发凉属于什么症状| 多多益善的意思是什么| 怀孕一个月内有什么反应| 芸豆是什么豆| 荨麻疹是什么原因引起| 编者按是什么意思| 鸡子是什么东西| x代表什么意思| 豆瓣是什么软件| 吃头孢不能吃什么水果| 什么是阳光抑郁症| 六九是什么意思| 紫癜是什么病严重吗| 暗语是什么意思| 为什么全身酸痛| 红薯不能和什么食物一起吃| 蝗虫用什么呼吸| 肚子一直响是什么原因| lee是什么档次| 三个牛读什么字| 雀斑是什么原因引起的| 格局小是什么意思| 低聚木糖是什么| 小孩爱流鼻血是什么原因| outlets是什么意思| 交尾是什么意思| 家财万贯是什么生肖| 夏天猪骨煲什么汤最好| 跳蚤是什么| 脍炙人口什么意思| 一个火一个同念什么| 鹿五行属什么| 什么的水流| 摩什么擦什么| 青金石五行属什么| 为什么睡觉会突然抖一下| 神经性头疼是什么症状| 蒲公英的种子像什么| 吃芒果有什么好处| 脚底抽筋是什么原因引起的| 什么子孙| 飞机加什么油| 早上起来口苦吃什么药| lsd是什么| 言尽于此是什么意思| hpv和tct有什么区别| 胼胝体是什么意思| 红色连衣裙配什么鞋子好看| 画蛇添足是什么生肖| 骨盆前倾挂什么科| 烤冷面的面皮是什么面| 为什么坐月子不能吹风| 农历五月十九是什么日子| 附件炎是什么| 出其不意下一句是什么| 6月21是什么星座| 葡萄糖粉适合什么人喝| 什么样的房子不能住人脑筋急转弯| 孕妇吃什么水果好对胎儿好| 女人脑供血不足吃什么| 画蛇添足的故事告诉我们什么道理| 什么叫湿热| 扩张是什么意思| guou是什么牌子的手表| 螃蟹代表什么生肖| 神经递质是什么意思| 宫颈阳性是什么意思| 卡拉是什么意思| 痔疮看什么科室| pcr是什么| 检查是否怀孕要挂什么科| 吃什么养肺| 肝功能看什么科室| 手抖是因为什么| 幽门螺杆菌抗体阳性什么意思| 鸭肉不能和什么一起吃| 乙肝两对半25阳性是什么意思| 生物酶是什么东西| 指甲油什么牌子好| 音字五行属什么| 婴儿什么时候吃辅食| 能吃是福是什么意思| 老年人腿脚无力是什么原因| 什么叫应届毕业生| 艾迪生病是什么病| 吃东西感觉口苦是什么原因| 物美价廉是什么意思| 脑血管造影是什么意思| 肝火旺吃什么降火最快| no是什么气体| 水对什么| 胃疼吃点什么药| 威化是什么意思| 百度Jump to content

周冬雨晒自拍内裤出镜 皮肤都是胶原蛋白内衣都是少女心

From Wikipedia, the free encyclopedia
百度 2016年全国银行卡在用发卡数量亿张,同比增长%。

In object-oriented programming, a destructor (sometimes abbreviated dtor[1]) is a method which is invoked mechanically just before the memory of the object is released.[2] It can happen either when its lifetime is bound to scope and the execution leaves the scope, when it is embedded in another object whose lifetime ends, or when it was allocated dynamically and is released explicitly. Its main purpose is to free the resources (memory allocations, open files or sockets, database connections, resource locks, etc.) which were acquired by the object during its life and/or deregister from other entities which may keep references to it. Destructors are necessary in resource acquisition is initialization (RAII).

With most kinds of automatic garbage collection algorithms, the releasing of memory may happen a long time after the object becomes unreachable, making destructors unsuitable for time-critical purposes. In these languages, the freeing of resources is done through an lexical construct (such as try-finally, Python's with, or Java's "try-with-resources"), or by explicitly calling a function (equivalent to explicit deletion); in particular, many object-oriented languages use the dispose pattern.

Syntax

[edit]
  • C++: destructors have the same name as the class with which they are associated, but with a tilde prefix (for example, a class X with a constructor X() has a destructor ~X()).[2]
  • C#: same syntax as C++. Historically called destructors, now called finalizers due to confusion.[3]
  • D: declared as ~this() (whereas constructors are declared as this()).
  • Java: provided by 2 interfaces, Closeable (deprecated) and AutoCloseable. In Java 9+, destructors are replaced by Cleaner. Java also used to have Object.finalize(), which was also deprecated.
  • Object Pascal: destructor methods have the keyword destructor and can be any name, but convention is Destroy.
  • Objective-C: destructor method is named dealloc.
  • Perl: destructor method is named DESTROY; in the Moose object system extension, it is named DEMOLISH.
  • PHP: In PHP 5+, destructor method is named __destruct. There were no destructors in prior versions of PHP.[4]
  • Python: destructor method is named __del__. Called destructors in Python 2,[5] now called finalizers in Python 3.[6]
  • Rust: destructor method is named drop and is provided by the Drop trait.[7]
  • Swift: destructor method is named deinit.

Language details

[edit]

C++

[edit]

The destructor has the same name as the class, but with a tilde (~) before it.[2] For example, a class called Foo will have the destructor ~Foo(). Additionally, destructors have neither parameters nor return types.[2] As stated above, a destructor for an object is called whenever the object's lifetime ends.[2] If the object was created as an automatic variable, its lifetime ends and the destructor is called automatically when the object goes out of scope. Because C++ does not have garbage collection, if the object was created with a new statement (dynamically on the heap), then its destructor is called when the delete operator is applied to a pointer to the object. Usually that operation occurs within another destructor, typically the destructor of a smart pointer object.

In inheritance hierarchies, the declaration of a virtual destructor in the base class ensures that the destructors of derived classes are invoked properly when an object is deleted through a pointer-to-base-class. Objects that may be deleted in this way need to inherit a virtual destructor.

A destructor should never throw an exception.[8]

Non-class scalar types have what's called a pseudo-destructor which can be accessed by using typedef or template arguments. This construct makes it possible to write code without having to know if a destructor exists for a given type.

int f() {
    int a = 123;
    using T = int;
    a.~T();
    return a; // undefined behavior
}

In older versions of the standard, pseudo-destructors were specified to have no effect, however that was changed in a defect report to make them end the lifetime of the object they are called on.[9]

Objects which cannot be safely copied and/or assigned should be disabled from such semantics by declaring their corresponding functions as deleted. A detailed description of this method can be found in Scott Meyers' popular book, Effective Modern C++ (Item 11: "Prefer deleted functions to private undefined ones."[10]). If they are marked deleted, they should be public so that accidental uses do not warn that they are private, but explicitly deleted. Since C++26, it is possible to specify a reason for the deletion.

Example

[edit]
import std;

class Foo {
private:
    char data[];
    friend struct std::formatter<Foo>;
public:
    // Constructor
    explicit Foo(const char* s = ""): 
        data{new char[std::strlen(s) + 1]} {
        std::strcpy(data, s);
    }

    Foo(const Foo& other) = delete("Copy construction disabled");
    Foo& operator=(const Foo& other) = delete("Copy assignment disabled");

    // Destructor
    ~Foo() { 
        delete[] data; 
    }
};

template <>
struct std::formatter<Foo> {
    constexpr auto parse(std::format_parse_context& ctx) -> const char* {
        return ctx.end();
    }

    template <typename FormatContext>
    auto format(const Foo& foo, FormatContext& ctx) -> FormatContext::iterator {
        return std::format_to(ctx.out(), "{}", foo.data);
    }
};

int main(int argc, char* argv[]) {
    Foo foo("Hello from the stack!");
    std::println("{}", foo);

    Foo* foo = new Foo("Hello from the heap!");
    std::println("{}", *foo);
    delete foo;
}

By using smart pointers with the "Resource Acquisition is Initialization" (RAII) idiom, manually defining destructors or calling resource cleanup can be bypassed. Other languages like Java and C# include a finally block for cleanup, however C++ does not have the finally block and instead encourages using the RAII idiom.

import std;

class Foo {
private:
    std::unique_ptr<char[]> data;
    friend struct std::formatter<Foo>;
public:
    // Constructor
    explicit Foo(const char* s = ""):
        data{std::make_unique<char[]>(std::strlen(s) + 1)} {
        std::strcpy(data.get(), s);
    }

    Foo(const Foo& other) = delete("Copy construction disabled");
    Foo& operator=(const Foo& other) = delete("Copy assignment disabled");

    // Destructor is automatically handled by unique_ptr
    ~Foo() = default;
};

template <>
struct std::formatter<Foo> {
    constexpr auto parse(std::format_parse_context& ctx) -> const char* {
        return ctx.end();
    }

    template <typename FormatContext>
    auto format(const Foo& foo, FormatContext& ctx) -> FormatContext::iterator {
        return std::format_to(ctx.out(), "{}", foo.data.get());
    }
};

int main(int argc, char* argv[]) {
    Foo foo("Hello from the stack!");
    std::println("{}", foo);

    std::unique_ptr<Foo> foo = std::make_unique<Foo>("Hello from the heap!");
    std::println("{}", *foo);
}

C#

[edit]

Destructors in C# are not manually called or called by a delete operator like in C++. They are only called by the garbage collector.

UML class in C# containing a constructor and a destructor.
using System;

class MyClass
{
    private string resource;

    public MyClass(string resourceName)
    {
        resource = resourceName;
    }

    ~MyClass()
    {
        Console.WriteLine($"Destructor called to clean up resource: {resource}");
        // cleanup code
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyClass obj = new MyClass("Sample Resource");
        
        GC.Collect();
        GC.WaitForPendingFinalizers();

        Console.WriteLine("Program finished");
    }
}

C# also has a "dispose" pattern in which the class must implement the interface IDisposable. C# supports try-with-resources blocks similar to Java, called using-with-resources. A class must implement IDisposable to be used in a using-with-resources block.

using System;

class MyClass : IDisposable
{
    private string resource;
    private bool disposed = false; // To detect redundant calls to Dispose()

    public MyClass(string resourceName)
    {
        resource = resourceName;
    }

    ~MyClass()
    {
        Console.WriteLine("Destructor called");
        Dispose(false);
    }

    public void Dispose()
    {
        Console.WriteLine("Disposer called");
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                Console.WriteLine("Disposing managed resources.");
            }
            Console.WriteLine("Disposing unmanaged resources.");
            disposed = true;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        using (Destructible d = new Destructible())
        {
            Console.WriteLine("Using Destructible.");
            // ...
        }
        // after using-with-resources, d.Dispose() will be called
    }
}

C with GCC extensions

[edit]

The GNU Compiler Collection's C compiler comes with 2 extensions that allow implementing destructors:

  • The destructor function attribute[11] allows defining global prioritized destructor functions: when main() returns, these functions are called in priority order before the process terminates. See also: Hacking the art of exploitation.[12]
  • The cleanup variable attribute allows attaching a destructor function to a variable: the function is called when the variable goes out of scope.

Java

[edit]

Java provides 2 interfaces that implement destructors, java.lang.Closeable (deprecated) and java.lang.AutoCloseable. A class that implements AutoCloseable is able to be used in a "try-with-resources" block, available since Java 7.[13]

final class Destructible implements AutoCloseable {
    @Override
    public void close() {
        // cleanup code 
    }
}

public final class Example {
    try (Destructible d = new Destructible()) {
        System.out.println("Using Destructible.");
        // ...
    }
    // after try-with-resources, d.close() will be called
    
}

Prior to Java 7, a "try-finally" block was used.

final class Destructible {
    public void close() { 
        // cleanup code
    }
}

public final class Example {
    try {
        Destructible d = new Destructible();
        System.out.println("Using Destructible.");
    } finally {
        d.close()
    }
    
}

Historically, Java used Object.finalize() instead, however this has been deprecated. Java has a method called System.gc() to suggest the Java Virtual Machine (JVM) to perform garbage collection, which internally calls Runtime.getRuntime().gc(), which requests the garbage collector to trigger a garbage collection cycle, but this is not guaranteed, as the JVM manages memory independently. System.gc() may lead to finalize() being called, but only if the object is eligible for garbage collection and has a finalize() method.

class ParentFinalizerExample { ... }

class FinalizerExample extends ParentFinalizerExample {
    @Override
    protected void finalize() throws Throwable {
        try {
            System.out.println("finalize() called, cleaning up...");
        } finally {
            super.finalize(); // Always call super.finalize() to clean parent classes
        }
    }
}

public class Example {
    public static void main(String[] args) {
        FinalizerExample obj = new FinalizerExample ();
        obj = null;
        System.gc(); // Requests garbage collection (not guaranteed)
    }
}

Java also supports classes java.lang.ref.Cleaner and java.lang.ref.PhantomReference for safer low-level cleanup. Cleaner was introduced in Java 9 and is more efficient than PhantomReference, and works by registering an object with a cleaner thread which runs a cleanup action once the object is unreachable (i.e. no references to it exist).

import java.lang.ref.Cleaner;
import java.lang.ref.Cleaner.Cleanable;

class Resource {
    private static final Cleaner cleaner = Cleaner.create();

    static class State implements Runnable {
        private boolean cleaned = false;

        @Override
        public void run() {
            cleaned = true;
            System.out.println("Cleaned using Cleaner");
        }
    }

    private final State state;
    private final Cleanable cleanable;

    public Resource () {
        this.state = new State();
        this.cleanable = cleaner.register(this, state);
    }

    public void cleanup() {
        System.gc(); // Request garbage collection (not guaranteed)
    }
}

public class Example {
    public static void main(String[] args) {
        Resource resource = new Resource();
        resource = null;
        resource.cleanup();
    }
}

PhantomReference, since Java 1.2, is an older cleanup mechanism that uses a reference queue. PhantomReference is used solely for being notified that an object's garbage collection is pending. Once the object is garbage collected, the PhantomReference is enqueued into the ReferenceQueue. Unlike WeakReference which can be used to access the object if it still exists in memory, PhantomReference can only be used for detecting when an object will be destroyed. Both PhantomReference and WeakReference do not increase reference counts.

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;

class Resource {
    private final String name;

    public Resource(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

public class PhantomReferenceExample {
    public static void main(String[] args) throws InterruptedException {
        Resource resource = new Resource("My resource");
        ReferenceQueue<Resource> queue = new ReferenceQueue<>();
        PhantomReference<Resource> phantomRef = new PhantomReference<>(resource, queue);

        resource = null;

        System.gc();

        Reference<? extends Resource> ref = queue.poll();
        if (ref != null) {
            System.out.printf("Object is ready to be collected: %s%n", ((PhantomReference<?>)ref).get());
        }
    }
}

Python

[edit]

Python supports destructors and has a del keyword, but unlike delete in C++, del only decreases the reference count of the object, and does not necessarily immediately destroy the object.

class Destructible:
    def __init__(self, name: str) -> 'Destructible':
        self.name = name
        print(f"Created Destructible: {self.name}")

    def __del__(self) -> None:
        print(f"Destructor called for: {self.name}")

if __name__ == "__main__":
    d: Destructible = Destructible("My name")
    print(f"Using Destructible: {d.name}")
    del d

Much like Java and C#, Python has a try-with-resources block, called a with block or a "context manager". It is used for things like files and network connections.

from typing import Optional

class Destructible:
    def __init__(self, name: str) -> None:
        self.name: str = name
    
    def __enter__(self) -> 'Destructible':
        print(f"Entering context (allocating resource: {self.name})")
        return self

    def __exit__(self, exc_type: Optional[type], exc_val: Optional[Exception], exc_tb: Optional[type]) -> None:
        print(f"Exiting context (cleaning up resource: {self.name})")

if __name__ == "__main__":
    with Destructible("Resource A") as d:
        print(f"Using resource {d.name} inside context")

    # Most Python standard library resources support with blocks:
    with open(file_path, 'r') as file:
        print("Reading the file content:")
        content: str = file.read()
        print(content)

Rust

[edit]

Rust does not have destructors in the sense of object-oriented programming, but a struct can implement the Drop trait and the drop method to clean itself up after it goes out of scope.

It is not possible to destroy objects explicitly through a delete operator like in C++, though it is possible to manually call drop() prematurely by using std::mem::drop().

use std::mem;

struct Destructible {
    name: String,
}

impl Destructible {
    fn new(name: String) -> Self {
        Destructible { name }
    }
}

impl Drop for Destructible {
    fn drop(&mut self) {
        println!("Dropping Destructible: {}", self.name);
    }
}

fn main() {
    {
        let resource_a: Destructible = Destructible::new(String::from("Resource A"));
        println!("Using Destructible.");
    } // <--- resource_a goes out of scope here, `drop()` is called automatically

    let resource_b: Destructible = Destructible::new(String::from("Resource B"));
    println!("Dropping Destructible prematurely.");
    mem::drop(resource_b);
}

While lifetimes control the validity of references, they do not determine when drop() is called.

Xojo

[edit]

Destructors in Xojo (REALbasic) can be in one of two forms. Each form uses a regular method declaration with a special name (with no parameters and no return value). The older form uses the same name as the Class with a ~ (tilde) prefix. The newer form uses the name Destructor. The newer form is preferred because it makes refactoring the class easier.

Class Foobar
  // Old form
  Sub ~Foobar()
  End Sub

  // New form
  Sub Destructor()
  End Sub
End Class

See also

[edit]

References

[edit]
  1. ^ "dtor". TheFreeDictionary.com. Retrieved 2025-08-06.
  2. ^ a b c d e Sebesta, Robert W. (2012). ""11.4.2.3 Constructors and Destructors"". Concepts of Programming Languages (print) (10th ed.). Boston, MA, USA: Addison-Wesley. p. 487. ISBN 978-0-13-139531-2.
  3. ^ "Finalizers (C# Programming Guide)".
  4. ^ Constructors and Destructors, from PHP online documentation
  5. ^ "3. Data model — Python 2.7.18 documentation".
  6. ^ "3. Data model — Python 3.10.4 documentation".
  7. ^ "Destructors - the Rust Reference".
  8. ^ GotW #47: Uncaught exceptions Accessed 31 July 2011.
  9. ^ Smith, Richard; Voutilainen, Ville. "P0593R6:Implicit creation of objects for low-level object manipulation". open-std.org. Retrieved 2025-08-06.
  10. ^ Scott Meyers: Effective Modern C++, O'REILLY, ISBN 9781491903995
  11. ^ C "destructor" function attribute
  12. ^ Erickson, Jon (2008). Hacking the art of exploitation. No Starch Press. ISBN 978-1-59327-144-2.
  13. ^ Bloch, Joshua (2018). Effective Java (3rd ed.). Addison-Wesley. pp. 29–31. ISBN 978-0134685991.
高锰酸钾是什么颜色 生理盐水敷脸有什么作用 乳腺化疗期间吃什么 肌炎有什么症状 肚子胀气用什么药
长期喝什么茶能降三高 女为念什么 本色出演是什么意思 色散是什么意思 肝囊性灶是什么意思
不言而喻的喻是什么意思 23333是什么意思 舌吻是什么 什么阻力 光感是什么意思
狮子座后面是什么星座 薛之谦属什么生肖 青少年流鼻血是什么原因引起的 990是什么意思 变色龙指什么人
凌晨一点多是什么时辰hcv7jop9ns9r.cn 尿隐血是什么原因引起的hcv9jop2ns4r.cn 低密度脂蛋白偏高吃什么食物hcv7jop6ns1r.cn 后腰出汗多是什么原因hcv9jop7ns3r.cn 法会是什么意思hcv9jop1ns8r.cn
9月是什么星座的wmyky.com 吃什么利尿最快去腹水的hcv9jop6ns3r.cn 喀秋莎什么意思hcv8jop4ns2r.cn 以貌取人是什么意思hcv8jop7ns4r.cn 猴的守护神是什么菩萨hcv8jop7ns8r.cn
早些泄挂什么科hcv9jop3ns5r.cn 梦见生了个女儿是什么意思hcv8jop5ns0r.cn 煮玉米加盐有什么好处hcv8jop5ns3r.cn 啫啫煲为什么念juehcv9jop6ns4r.cn 子宫内膜炎有什么症状hcv9jop3ns1r.cn
地指什么生肖hcv8jop8ns4r.cn 阴平阳秘是什么意思hcv8jop8ns7r.cn 输卵管堵塞有什么症状hcv8jop9ns5r.cn 什么是双重人格hcv9jop7ns3r.cn 90年属马的是什么命hcv7jop5ns1r.cn
百度